diff options
author | Michael Chan <mchan@broadcom.com> | 2012-07-10 10:04:40 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-08-09 08:27:51 -0700 |
commit | 6577472957c45c35cedaa0e53748cb1c6c954e44 (patch) | |
tree | 38a0b4210e7b5c44b359cbc04b67c9fcdde7c58d /drivers/net/bnx2.c | |
parent | b4cbf953e071121a4082e35c9820c3c3c10aeb55 (diff) | |
download | kernel_samsung_smdk4412-6577472957c45c35cedaa0e53748cb1c6c954e44.zip kernel_samsung_smdk4412-6577472957c45c35cedaa0e53748cb1c6c954e44.tar.gz kernel_samsung_smdk4412-6577472957c45c35cedaa0e53748cb1c6c954e44.tar.bz2 |
bnx2: Fix bug in bnx2_free_tx_skbs().
[ Upstream commit c1f5163de417dab01fa9daaf09a74bbb19303f3c ]
In rare cases, bnx2x_free_tx_skbs() can unmap the wrong DMA address
when it gets to the last entry of the tx ring. We were not using
the proper macro to skip the last entry when advancing the tx index.
Reported-by: Zongyun Lai <zlai@vmware.com>
Reviewed-by: Jeffrey Huang <huangjw@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/net/bnx2.c')
-rw-r--r-- | drivers/net/bnx2.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 74580bb..c9b123c 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -5310,7 +5310,7 @@ bnx2_free_tx_skbs(struct bnx2 *bp) int k, last; if (skb == NULL) { - j++; + j = NEXT_TX_BD(j); continue; } @@ -5322,8 +5322,8 @@ bnx2_free_tx_skbs(struct bnx2 *bp) tx_buf->skb = NULL; last = tx_buf->nr_frags; - j++; - for (k = 0; k < last; k++, j++) { + j = NEXT_TX_BD(j); + for (k = 0; k < last; k++, j = NEXT_TX_BD(j)) { tx_buf = &txr->tx_buf_ring[TX_RING_IDX(j)]; dma_unmap_page(&bp->pdev->dev, dma_unmap_addr(tx_buf, mapping), |