bnx2x: use the right build_skb() helper
Jakub Kicinski
maintainerPATCH 1/1 bnx2x: use the right build_skb() helper
build_skb() no longer accepts slab buffers. Since slab use is fairly uncommon we prefer the drivers to call a separate slab_build_skb() function appropriately.
bnx2x uses the old semantics where size of 0 meant buffer from slab. It sets the fp->rx_frag_size to 0 for MTUs which don't fit in a page. It needs to call slab_build_skb().
This fixes the WARN_ONCE() of incorrect API use seen with bnx2x.
---
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
--- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +14 -2
@@ -672,6 +672,18 @@ static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,return 0 ; } +static struct sk_buff * +bnx2x_build_skb (const struct bnx2x_fastpath *fp,void *data) +{ +struct sk_buff *skb; + +if (fp->rx_frag_size) + skb =build_skb (data, fp->rx_frag_size); +else + skb =slab_build_skb (data); +return skb; +} +static void bnx2x_frag_free (const struct bnx2x_fastpath *fp,void *data) {if (fp->rx_frag_size)
@@ -779,7 +791,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,dma_unmap_single (&bp->pdev->dev,dma_unmap_addr (rx_buf, mapping), fp->rx_buf_size,DMA_FROM_DEVICE );if (likely (new_data)) - skb =build_skb (data, fp->rx_frag_size); + skb =bnx2x_build_skb (fp, data);if (likely (skb)) {#ifdef BNX2X_STOP_ON_ERROR
@@ -1046,7 +1058,7 @@ static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)dma_unmap_addr (rx_buf, mapping), fp->rx_buf_size, DMA_FROM_DEVICE); - skb =build_skb (data, fp->rx_frag_size); + skb =bnx2x_build_skb (fp, data);if (unlikely (!skb)) {bnx2x_frag_free (fp, data); bnx2x_fp_qstats(bp, fp)->
Signature · 1 line
2.39.2
Quoted 14 lines · Jakub Kicinski
build_skb()no longer accepts slab buffers. Since slab use is fairly uncommon we prefer the drivers to call a separateslab_build_skb()function appropriately.bnx2x uses the old semantics where size of 0 meant buffer from slab. It sets the
fp->rx_frag_sizeto 0 for MTUs which don't fit in a page. It needs to callslab_build_skb().This fixes the
WARN_ONCE()of incorrect API use seen with bnx2x.Reported-by Thomas Voegtle <[email protected]>Fixes ce098da1497c ("skbuff: Introduce slab_build_skb()")Signed-off-by Jakub Kicinski <[email protected]>
Quoted 9 lines
---
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]--- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
Thanks,
This patch was applied to netdev/net.git (main) by Jakub Kicinski <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:
Quoted 9 lines · On Tue, 28 Mar 2023 17:00:13 -0700 you wrote:
build_skb()no longer accepts slab buffers. Since slab use is fairly uncommon we prefer the drivers to call a separateslab_build_skb()function appropriately.bnx2x uses the old semantics where size of 0 meant buffer from slab. It sets the
fp->rx_frag_sizeto 0 for MTUs which don't fit in a page. It needs to callslab_build_skb().[...]
Here is the summary with links:
- [net] bnx2x: use the right build_skb() helper
https://git.kernel.org/netdev/net/c/8c495270845d
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html