net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts
BugLink: https://bugs.launchpad.net/bugs/2100292
[ Upstream commit 5ccdcdf186aec6b9111845fd37e1757e9b413e2f ]
Enqueue packets in dql after dma engine starts causes race condition.
Tx transfer starts once dma engine is started and may execute dql dequeue
in completion before it gets queued. It results in following kernel crash
while running iperf stress test:
kernel BUG at lib/dynamic_queue_limits.c:99!
<snip>
Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x238/0x248
lr : dql_completed+0x3c/0x248
Call trace:
dql_completed+0x238/0x248
axienet_dma_tx_cb+0xa0/0x170
xilinx_dma_do_tasklet+0xdc/0x290
tasklet_action_common+0xf8/0x11c
tasklet_action+0x30/0x3c
handle_softirqs+0xf8/0x230
<snip>
Start dmaengine after enqueue in dql fixes the crash.
Fixes: 6a91b846af ("net: axienet: Introduce dmaengine support")
Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com>
Link: https://patch.msgid.link/20241030062533.2527042-2-suraj.gupta2@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
CVE-2024-50297
Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Stefan Bader
parent
23695ffb76
commit
a3d95bf7c4
@@ -862,13 +862,13 @@ axienet_start_xmit_dmaengine(struct sk_buff *skb, struct net_device *ndev)
|
||||
skbuf_dma->sg_len = sg_len;
|
||||
dma_tx_desc->callback_param = lp;
|
||||
dma_tx_desc->callback_result = axienet_dma_tx_cb;
|
||||
dmaengine_submit(dma_tx_desc);
|
||||
dma_async_issue_pending(lp->tx_chan);
|
||||
txq = skb_get_tx_queue(lp->ndev, skb);
|
||||
netdev_tx_sent_queue(txq, skb->len);
|
||||
netif_txq_maybe_stop(txq, CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX),
|
||||
MAX_SKB_FRAGS + 1, 2 * MAX_SKB_FRAGS);
|
||||
|
||||
dmaengine_submit(dma_tx_desc);
|
||||
dma_async_issue_pending(lp->tx_chan);
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
xmit_error_unmap_sg:
|
||||
|
||||
Reference in New Issue
Block a user