Skip to content

Commit 5ccdcdf

Browse files
Suraj Guptakuba-moo
authored andcommitted
net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts
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: 6a91b84 ("net: axienet: Introduce dmaengine support") Signed-off-by: Suraj Gupta <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent be31ec5 commit 5ccdcdf

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/net/ethernet/xilinx/xilinx_axienet_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -924,13 +924,13 @@ axienet_start_xmit_dmaengine(struct sk_buff *skb, struct net_device *ndev)
924924
skbuf_dma->sg_len = sg_len;
925925
dma_tx_desc->callback_param = lp;
926926
dma_tx_desc->callback_result = axienet_dma_tx_cb;
927-
dmaengine_submit(dma_tx_desc);
928-
dma_async_issue_pending(lp->tx_chan);
929927
txq = skb_get_tx_queue(lp->ndev, skb);
930928
netdev_tx_sent_queue(txq, skb->len);
931929
netif_txq_maybe_stop(txq, CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX),
932930
MAX_SKB_FRAGS + 1, 2 * MAX_SKB_FRAGS);
933931

932+
dmaengine_submit(dma_tx_desc);
933+
dma_async_issue_pending(lp->tx_chan);
934934
return NETDEV_TX_OK;
935935

936936
xmit_error_unmap_sg:

0 commit comments

Comments
 (0)