Re: [RFC PATCH 2/7] crypto: api - Add crypto_tfm_ctx_dma

Catalin Marinas
2022-05-10T17:10:42Z

Hi Herbert,

Thanks for putting this together.

On Tue, May 10, 2022 at 07:07:10PM +0800, Herbert Xu wrote:
> diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h
> index f50c5d1725da5..cdf12e51c53a0 100644
> --- a/include/crypto/algapi.h
> +++ b/include/crypto/algapi.h
> @@ -189,10 +189,34 @@ static inline void crypto_xor_cpy(u8 *dst, const u8 *src1, const u8 *src2,
> }
> }
>
> +static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm)
> +{
> + return tfm->__crt_ctx;
> +}
> +
> +static inline void *crypto_tfm_ctx_align(struct crypto_tfm *tfm,
> + unsigned int align)
> +{
> + if (align <= crypto_tfm_ctx_alignment())
> + align = 1;
> +
> + return PTR_ALIGN(crypto_tfm_ctx(tfm), align);
> +}
> +
> static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm)
> {
> - return PTR_ALIGN(crypto_tfm_ctx(tfm),
> - crypto_tfm_alg_alignmask(tfm) + 1);
> + return crypto_tfm_ctx_align(tfm, crypto_tfm_alg_alignmask(tfm) + 1);
> +}
> +
> +static inline void *crypto_tfm_ctx_dma(struct crypto_tfm *tfm)
> +{
> + unsigned int align = 1;
> +
> +#ifdef ARCH_DMA_MINALIGN
> + align = ARCH_DMA_MINALIGN;
> +#endif
> +
> + return crypto_tfm_ctx_align(tfm, align);
> }

Is there a case where a driver needs the minimum alignment between
ARCH_DMA_MINALIGN and crypto_tfm_alg_alignmask()+1? Maybe for platforms
where ARCH_DMA_MINALIGN is 8 (fully coherent) but the device's bus
master alignment requirements are higher.

My plan is to have ARCH_DMA_MINALIGN always defined but potentially
higher than ARCH_KMALLOC_MINALIGN on specific architectures. I think
crypto_tfm_ctx_dma() should use ARCH_KMALLOC_MINALIGN (and no #ifdefs)
until I get my patches sorted and I'll replace it with ARCH_DMA_MINALIGN
once it's defined globally (still no #ifdefs). Currently in mainline
it's ARCH_KMALLOC_MINALIGN that gives the static DMA alignment.

With the explicit crypto_tfm_ctx_dma(), can CRYPTO_MINALIGN_ATTR be
dropped entirely? This may be beneficial in reducing the structure size
when no DMA is required.

--
Catalin