Hi Ard,
On Mon, Jul 29, 2019 at 9:44 AM Ard Biesheuvel
<[email protected]> wrote:
> The generic aegis128 driver has been updated to support using SIMD
> intrinsics to implement the core AES based transform, and this has
> been wired up for ARM and arm64, which both provide a simd.h header.
>
> As it turns out, most architectures don't provide this header, even
> though a version of it exists in include/asm-generic, and this is
> not taken into account by the aegis128 driver, resulting in build
> failures on those architectures.
>
> So update the aegis128 code to only import simd.h (and the related
> header in internal/crypto) if the SIMD functionality is enabled for
> this driver.
>
> Reported-by: Geert Uytterhoeven <[email protected]>
> Signed-off-by: Ard Biesheuvel <[email protected]>
Thanks for your patch!
> --- a/crypto/aegis128-core.c
> +++ b/crypto/aegis128-core.c
> @@ -8,7 +8,6 @@
>
> #include <crypto/algapi.h>
> #include <crypto/internal/aead.h>
> -#include <crypto/internal/simd.h>
> #include <crypto/internal/skcipher.h>
> #include <crypto/scatterwalk.h>
> #include <linux/err.h>
> @@ -16,7 +15,11 @@
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/scatterlist.h>
> +
> +#ifdef CONFIG_CRYPTO_AEGIS128_SIMD
> +#include <crypto/internal/simd.h>
> #include <asm/simd.h>
Wouldn't including <crypto/internal/simd.h> unconditionally, and
adding just
#else
static inline bool may_use_simd(void)
{
return false;
}
and be done with it, work too?
> +#endif
>
> #include "aegis.h"
>
> @@ -44,6 +47,15 @@ struct aegis128_ops {
>
> static bool have_simd;
>
> +static bool aegis128_do_simd(void)
> +{
> +#ifdef CONFIG_CRYPTO_AEGIS128_SIMD
> + if (have_simd)
> + return crypto_simd_usable();
> +#endif
> + return false;
> +}
> +
> bool crypto_aegis128_have_simd(void);
> void crypto_aegis128_update_simd(struct aegis_state *state, const void *msg);
> void crypto_aegis128_encrypt_chunk_simd(struct aegis_state *state, u8 *dst,
> @@ -66,7 +78,7 @@ static void crypto_aegis128_update(struct aegis_state
> *state)
> static void crypto_aegis128_update_a(struct aegis_state *state,
> const union aegis_block *msg)
> {
> - if (have_simd && crypto_simd_usable()) {
> + if (aegis128_do_simd()) {
> crypto_aegis128_update_simd(state, msg);
> return;
> }
[...]
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds