mirror of https://gitee.com/openkylin/linux.git
sfc: Fix DMA mapping cleanup in case of an error in TSO
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>
This commit is contained in:
parent
a355020af4
commit
a7ebd27a13
|
@ -821,8 +821,6 @@ static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
|
||||||
EFX_TXQ_MASK];
|
EFX_TXQ_MASK];
|
||||||
efx_tsoh_free(tx_queue, buffer);
|
efx_tsoh_free(tx_queue, buffer);
|
||||||
EFX_BUG_ON_PARANOID(buffer->skb);
|
EFX_BUG_ON_PARANOID(buffer->skb);
|
||||||
buffer->len = 0;
|
|
||||||
buffer->continuation = true;
|
|
||||||
if (buffer->unmap_len) {
|
if (buffer->unmap_len) {
|
||||||
unmap_addr = (buffer->dma_addr + buffer->len -
|
unmap_addr = (buffer->dma_addr + buffer->len -
|
||||||
buffer->unmap_len);
|
buffer->unmap_len);
|
||||||
|
@ -836,6 +834,8 @@ static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
|
||||||
PCI_DMA_TODEVICE);
|
PCI_DMA_TODEVICE);
|
||||||
buffer->unmap_len = 0;
|
buffer->unmap_len = 0;
|
||||||
}
|
}
|
||||||
|
buffer->len = 0;
|
||||||
|
buffer->continuation = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue