On Fri, 2 Aug 2019 at 03:20, Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > > Hi Herbert, > > On Thu, 1 Aug 2019 20:28:56 +0300 Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote: > > > > On Thu, 1 Aug 2019 at 15:28, Heiko Carstens <heiko.carstens@xxxxxxxxxx> wrote: > > > > > > On Wed, Jul 31, 2019 at 01:44:54PM +0200, Heiko Carstens wrote: > > > > On Wed, Jul 31, 2019 at 09:32:16PM +1000, Herbert Xu wrote: > > > > > On Wed, Jul 31, 2019 at 01:15:20PM +0200, Heiko Carstens wrote: > > > > > > > > > > > > However that doesn't fix the simd.h header file breakage with the > > > > > > second patch :) > > > > > > > > > > That fix should be there now too. > > > > > > > > Yes, works now. Thank you! > > > > > > Still not... with linux-next as of today I get this (s390 defconfig): > > > > > > ERROR: "crypto_aegis128_decrypt_chunk_simd" [crypto/aegis128.ko] undefined! > > > ERROR: "crypto_aegis128_update_simd" [crypto/aegis128.ko] undefined! > > > ERROR: "crypto_aegis128_encrypt_chunk_simd" [crypto/aegis128.ko] undefined! > > > scripts/Makefile.modpost:105: recipe for target 'modules-modpost' failed > > > > > > > Hello Heiko, > > > > Apologies for the breakage. The first two fixes addressed obvious > > shortcomings in my code, but with this issue, I'm a bit puzzled tbh. > > The calls to these missing functions should be optimized away, since > > have_simd never gets assigned if CONFIG_CRYPTO_AEGIS128_SIMD is not > > defined, but for some reason, this isn't working. Which version of GCC > > are you using? > > > > Also, could you please try whether the patch below fixes the problem? Thanks > > > > https://lore.kernel.org/linux-crypto/20190729074434.21064-1-ard.biesheuvel@xxxxxxxxxx/ > > It might be time to revert all this series and try again. The > implementation seems to have not been well thought through from a kernel > building point of view. For a start the two commits > > 7cdc0ddbf74a ("crypto: aegis128 - add support for SIMD acceleration") > ecc8bc81f2fb ("crypto: aegis128 - provide a SIMD implementation based on NEON intrinsics") > > seem to be in the wrong order (function used in the first before being > defined in the second). There are a series of declarations of external > functions in crypto/aegis128-core.c that should be in a header file. > And there was the assumption that asm/simd.h was available everywhere. > > Also crypto_aegis128_decrypt_chunk_simd() is referenced in a structure > initialisation (unprotected by any CONFIG_ variable - and so will be > referenced even if it does not exist). The compiler will have a hard > time knowing that "have_simd" is effectively a constant zero (and > crypto_simd_usable() is not constant). The only assignment to have_simd is guarded by a if (IS_ENABLED(CONFIG_xxx)) conditional, which is optimized away if the Kconfig symbol is not set. Usually, the compiler uses this information to infer that have_simd is a compile time constant '0', and optimizes away all the code that depends on have_simd being true. I haven't figured out yet why this doesn't work as expected on some versions of GCC, since it is a very common pattern throughout the kernel.