Patch "net: sparx5: fix FDMA performance issue" has been added to the 5.15-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: sparx5: fix FDMA performance issue

to the 5.15-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-sparx5-fix-fdma-performance-issue.patch
and it can be found in the queue-5.15 subdirectory.

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



commit 59838860ff6962c3b5864616b9e93af342a98329
Author: Daniel Machon <daniel.machon@xxxxxxxxxxxxx>
Date:   Thu Dec 5 14:54:26 2024 +0100

    net: sparx5: fix FDMA performance issue
    
    [ Upstream commit f004f2e535e2b66ccbf5ac35f8eaadeac70ad7b7 ]
    
    The FDMA handler is responsible for scheduling a NAPI poll, which will
    eventually fetch RX packets from the FDMA queue. Currently, the FDMA
    handler is run in a threaded context. For some reason, this kills
    performance.  Admittedly, I did not do a thorough investigation to see
    exactly what causes the issue, however, I noticed that in the other
    driver utilizing the same FDMA engine, we run the FDMA handler in hard
    IRQ context.
    
    Fix this performance issue, by  running the FDMA handler in hard IRQ
    context, not deferring any work to a thread.
    
    Prior to this change, the RX UDP performance was:
    
    Interval           Transfer     Bitrate         Jitter
    0.00-10.20  sec    44.6 MBytes  36.7 Mbits/sec  0.027 ms
    
    After this change, the rx UDP performance is:
    
    Interval           Transfer     Bitrate         Jitter
    0.00-9.12   sec    1.01 GBytes  953 Mbits/sec   0.020 ms
    
    Fixes: 10615907e9b5 ("net: sparx5: switchdev: adding frame DMA functionality")
    Signed-off-by: Daniel Machon <daniel.machon@xxxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
index 174d89ee6374..ccfad6fba5b4 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c
@@ -647,12 +647,11 @@ static int sparx5_start(struct sparx5 *sparx5)
 	err = -ENXIO;
 	if (sparx5->fdma_irq >= 0) {
 		if (GCB_CHIP_ID_REV_ID_GET(sparx5->chip_id) > 0)
-			err = devm_request_threaded_irq(sparx5->dev,
-							sparx5->fdma_irq,
-							NULL,
-							sparx5_fdma_handler,
-							IRQF_ONESHOT,
-							"sparx5-fdma", sparx5);
+			err = devm_request_irq(sparx5->dev,
+					       sparx5->fdma_irq,
+					       sparx5_fdma_handler,
+					       0,
+					       "sparx5-fdma", sparx5);
 		if (!err)
 			err = sparx5_fdma_start(sparx5);
 		if (err)




[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