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