mvneta_swbm_build_skb() is only invoked from mvneta_poll(), the NAPI poll routine, so it always runs in NAPI context. Use napi_build_skb() instead of build_skb() to source the skb head from the per-CPU NAPI cache, avoiding a per-packet kmem_cache_alloc() of the skb head. Signed-off-by: Lorenzo Bianconi --- drivers/net/ethernet/marvell/mvneta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 543e566425c1..c2b1098d8d1d 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -2403,7 +2403,7 @@ mvneta_swbm_build_skb(struct mvneta_port *pp, struct page_pool *pool, if (unlikely(xdp_buff_has_frags(xdp))) num_frags = sinfo->nr_frags; - skb = build_skb(xdp->data_hard_start, PAGE_SIZE); + skb = napi_build_skb(xdp->data_hard_start, PAGE_SIZE); if (!skb) return ERR_PTR(-ENOMEM); --- base-commit: 859e40055c19ceb8b8215f3269e57075023b72b4 change-id: 20260917-mvneta-napi-poll-987b8e9aef0e Best regards, -- Lorenzo Bianconi