On Fri, 15 Apr 2022 at 11:51, Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > > On Fri, 15 Apr 2022 at 10:12, Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> wrote: > > > > On Fri, Apr 15, 2022 at 10:05:21AM +0200, Ard Biesheuvel wrote: > > > > > > I guess that should be fixable. GIven that this is about padding > > > rather than alignment, we could do something like > > > > > > struct crypto_request { > > > union { > > > struct { > > > ... fields ... > > > }; > > > u8 __padding[ARCH_DMA_MINALIGN]; > > > }; > > > void __ctx[] __align(CRYPTO_MINALIGN); > > > }; > > > > > > And then hopefully, we can get rid of the padding once we fix drivers > > > doing non-cache coherent inbound DMA into those structures. > > > > Sorry, I don't think this works. kmalloc can still return something > > that's not ARCH_DMA_MINALIGN-aligned, and therefore __ctx won't be > > aligned correctly. > > > > That is the whole point, really: ARCH_DMA_MINALIGN==128 does not mean > __ctx needs to be aligned to 128 bytes, it only means that it should > not share a 128 byte cacheline with the preceding fields. Let's rephrase that as 'must not share a cacheline with the preceding fields, and the worst case we expect to have to deal with is a cacheline size of 128 bytes'