bnx2: Fix bug in bnx2_free_tx_skbs().
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>
This commit is contained in:
parent
b28ba72665
commit
c1f5163de4
|
@ -5372,7 +5372,7 @@ bnx2_free_tx_skbs(struct bnx2 *bp)
|
|||
int k, last;
|
||||
|
||||
if (skb == NULL) {
|
||||
j++;
|
||||
j = NEXT_TX_BD(j);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -5384,8 +5384,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),
|
||||
|
|
Loading…
Reference in New Issue