mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
net: airoha: Move entries to queue head in case of DMA mapping failure in airoha_dev_xmit()
In order to respect the original descriptor order and avoid any
potential IOMMU fault or memory corruption, move pending queue entries
to the head of hw queue tx_list if the DMA mapping of current inflight
packet fails in airoha_dev_xmit routine.
Fixes: 3f47e67dff ("net: airoha: Add the capability to consume out-of-order DMA tx descriptors")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260429-airoha-xmit-unmap-error-path-v2-1-32e43b7c6d25@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
7a33345153
commit
75df490c9e
@@ -2120,14 +2120,12 @@ static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
error_unmap:
|
||||
while (!list_empty(&tx_list)) {
|
||||
e = list_first_entry(&tx_list, struct airoha_queue_entry,
|
||||
list);
|
||||
list_for_each_entry(e, &tx_list, list) {
|
||||
dma_unmap_single(dev->dev.parent, e->dma_addr, e->dma_len,
|
||||
DMA_TO_DEVICE);
|
||||
e->dma_addr = 0;
|
||||
list_move_tail(&e->list, &q->tx_list);
|
||||
}
|
||||
list_splice(&tx_list, &q->tx_list);
|
||||
|
||||
spin_unlock_bh(&q->lock);
|
||||
error:
|
||||
|
||||
Reference in New Issue
Block a user