Re: block: DMA alignment of IO buffer allocated from slab

From: Christopher Lameter
Date: Mon Sep 24 2018 - 11:17:19 EST


On Mon, 24 Sep 2018, Bart Van Assche wrote:

> /*
> * kmalloc and friends return ARCH_KMALLOC_MINALIGN aligned
> * pointers. kmem_cache_alloc and friends return ARCH_SLAB_MINALIGN
> * aligned pointers.
> */

kmalloc alignment is only guaranteed to ARCH_KMALLOC_MINALIGN. That power
of 2 byte caches (without certain options) are aligned to the power of 2
is due to the nature that these objects are stored in SLUB. Other
allocators may behave different and actually different debug options
result in different alignments. You cannot rely on that.

ARCH_KMALLOC minalign shows the mininum alignment guarantees. If that is
not sufficient and you do not want to change the arch guarantees then you
can open you own slab cache with kmem_cache_create() where you can specify
different alignment requirements.