Patch "net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts" has been added to the 6.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts

to the 6.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-xilinx-axienet-enqueue-tx-packets-in-dql-before-.patch
and it can be found in the queue-6.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 77b1df2aa64e4989df8f4058fac3a36b04eb12fe
Author: Suraj Gupta <suraj.gupta2@xxxxxxx>
Date:   Wed Oct 30 11:55:32 2024 +0530

    net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts
    
    [ 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: 6a91b846af85 ("net: axienet: Introduce dmaengine support")
    Signed-off-by: Suraj Gupta <suraj.gupta2@xxxxxxx>
    Link: https://patch.msgid.link/20241030062533.2527042-2-suraj.gupta2@xxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index 0c4c57e7fddc2..877f190e3af4e 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -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:




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux