Subject: Re: linux-next: Tree for Jul 31 - s390 crypto build breakage

From: Stephen Rothwell <[email-masked]>
Date: Fri, 2 Aug 2019 10:20:19 +1000

Hi Herbert,

On Thu, 1 Aug 2019 20:28:56 +0300 Ard Biesheuvel <[email-masked]> wrote:
>
> On Thu, 1 Aug 2019 at 15:28, Heiko Carstens <[email-masked]> 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/[email-masked]/

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).
-- 
Cheers,
Stephen Rothwell