mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 00:39:48 +00:00
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.
Reported-by: Thomas Voegtle <tv@lio96.de>
Link: https://lore.kernel.org/all/b8f295e4-ba57-8bfb-7d9c-9d62a498a727@lio96.de/
Fixes: ce098da149
("skbuff: Introduce slab_build_skb()")
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230329000013.2734957-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6c75dc94f2
commit
8c49527084
1 changed files with 14 additions and 2 deletions
|
@ -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)->
|
||||
|
|
Loading…
Reference in a new issue