Re: [PATCH] net: page_pool: Remove zone/policy GFP flags when allocating XArray entries

Toke Høiland-Jørgensen <[email protected]>
Newsgroups org.kernel.vger.netdev,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Rong Zhang <[email protected]> writes:

> Net drivers request GFP flags according to both the current context and
> the device constraints, but the XArray entry itself is by no mean used
> by the device. Passing though device constraints to XArray allocation is
> a bug and will be warned and fixed up by slab, e.g.:
>
>     Unexpected gfp: 0x4 (GFP_DMA32). Fixing up to gfp: 0x82820 (GFP_ATOMIC|__GFP_NOWARN|__GFP_NOMEMALLOC). Fix your code!
>     CPU: 2 UID: 0 PID: 1071629 Comm: kworker/u80:1 Not tainted 7.2.0-rc7+ #1 PREEMPT(lazy)
>     Hardware name: LENOVO 21Q4/LNVNB161216, BIOS PXCN27WW 10/20/2025
>     Workqueue: mt76 mt792x_pm_wake_work [mt792x_lib]
>     Call Trace:
>      <TASK>
>      dump_stack_lvl+0x6e/0x90
>      kmalloc_fix_flags+0x4d/0x6a
>      refill_objects+0x10a/0x330
>      __pcs_replace_empty_main+0x292/0x5c0
>      kmem_cache_alloc_lru_noprof+0x4c2/0x680
>      ? __xas_nomem+0x3a/0x120
>      __xas_nomem+0x3a/0x120
>      __xa_alloc+0xd4/0x190
>      page_pool_dma_map+0xef/0x400
>      __page_pool_alloc_netmems_slow+0xed/0x480
>      ? lock_release+0x280/0x490
>      page_pool_alloc_frag_netmem+0xe0/0x3a0
>      page_pool_alloc_frag+0xe/0x20
>      mt76_dma_rx_fill_buf+0x1f6/0x580 [mt76]
>      mt76_dma_rx_reset+0x1cf/0x230 [mt76]
>      mt792x_wpdma_reset+0x183/0x1b0 [mt792x_lib]
>      mt792x_wpdma_reinit_cond+0x5e/0xa0 [mt792x_lib]
>      mt792xe_mcu_drv_pmctrl+0x28/0x60 [mt792x_lib]
>      mt792x_mcu_drv_pmctrl+0x3e/0x90 [mt792x_lib]
>      mt792x_pm_wake_work+0x2d/0x1d0 [mt792x_lib]
>      ? process_one_work+0x20e/0x600
>      process_one_work+0x230/0x600
>      ? process_one_work+0x256/0x600
>      worker_thread+0x1ec/0x3c0
>      ? rescuer_thread+0x610/0x610
>      kthread+0xf2/0x130
>      ? kthread_affine_node+0x140/0x140
>      ret_from_fork+0x2a5/0x380
>      ? kthread_affine_node+0x140/0x140
>      ret_from_fork_asm+0x11/0x20
>      </TASK>
>
> Currently mt76 and stmmac may allocate page pool pages with GFP_DMA32.
>
> Fix it by removing zone/policy GFP flags when allocating XArray entries.
> This is inspired by commit 96d578088085 ("iommu/dma: Use the gfp
> parameter in __iommu_dma_alloc_noncontiguous()").
>
> Fixes: ee62ce7a1d90 ("page_pool: Track DMA-mapped pages and unmap them when destroying the pool")
> Signed-off-by: Rong Zhang <[email protected]>

Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.