summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Turton <nturton@solarflare.com>2009-12-23 13:47:13 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2010-04-01 15:55:41 -0700
commit1f3a1f385336c324df07fdf420637f88bd3c137c (patch)
tree6a176922ac7503321c5571c575f16713e45198f2
parent769c57aa2e772496797ef662a367af30be6a7aea (diff)
sfc: Fix DMA mapping cleanup in case of an error in TSO
commit a7ebd27a13757248863cd61e541af7fa9e7727ee upstream. We need buffer->len to remain valid to work out the correct address to be unmapped. We therefore need to clear buffer->len after the unmap operation. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/net/sfc/tx.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/sfc/tx.c b/drivers/net/sfc/tx.c
index 14a14788566c..d36a2894f005 100644
--- a/drivers/net/sfc/tx.c
+++ b/drivers/net/sfc/tx.c
@@ -823,8 +823,6 @@ static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
tx_queue->efx->type->txd_ring_mask];
efx_tsoh_free(tx_queue, buffer);
EFX_BUG_ON_PARANOID(buffer->skb);
- buffer->len = 0;
- buffer->continuation = true;
if (buffer->unmap_len) {
unmap_addr = (buffer->dma_addr + buffer->len -
buffer->unmap_len);
@@ -838,6 +836,8 @@ static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
PCI_DMA_TODEVICE);
buffer->unmap_len = 0;
}
+ buffer->len = 0;
+ buffer->continuation = true;
}
}