On Thu, Oct 17, 2019 at 09:09:03PM +0200, Ard Biesheuvel wrote:
> +void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
> +{
> +     if (!static_branch_likely(&have_neon) || !crypto_simd_usable()) {
> +             hchacha_block_generic(state, stream, nrounds);
> +     } else {
> +             kernel_neon_begin();
> +             hchacha_block_neon(state, stream, nrounds);
> +             kernel_neon_end();
> +     }
> +}
> +EXPORT_SYMBOL(hchacha_block_arch);
[...]

> @@ -110,7 +145,7 @@ static int xchacha_neon(struct skcipher_request *req)
>  
>       chacha_init_generic(state, ctx->key, req->iv);
>  
> -     if (crypto_simd_usable()) {
> +     if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
>               kernel_neon_begin();
>               hchacha_block_neon(state, subctx.key, ctx->nrounds);
>               kernel_neon_end();

Shouldn't xchacha_neon() call hchacha_block_arch(), rather than implement the
same logic itself?

- Eric

Reply via email to