On Thu, Feb 4, 2021 at 3:06 AM Kevin Hao <haokexin@xxxxxxxxx> wrote: > > In the current implementation of page_frag_alloc(), it doesn't have > any align guarantee for the returned buffer address. But for some > hardwares they do require the DMA buffer to be aligned correctly, > so we would have to use some workarounds like below if the buffers > allocated by the page_frag_alloc() are used by these hardwares for > DMA. > buf = page_frag_alloc(really_needed_size + align); > buf = PTR_ALIGN(buf, align); > > These codes seems ugly and would waste a lot of memories if the buffers > are used in a network driver for the TX/RX. So introduce > page_frag_alloc_align() to make sure that an aligned buffer address is > returned. > > Signed-off-by: Kevin Hao <haokexin@xxxxxxxxx> > Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > v3: Use align mask as suggested by Alexander. > > include/linux/gfp.h | 12 ++++++++++-- > mm/page_alloc.c | 8 +++++--- > 2 files changed, 15 insertions(+), 5 deletions(-) Looks good to me. Reviewed-by: Alexander Duyck <alexanderduyck@xxxxxx>