Patch "ntb_netdev: Use dev_kfree_skb_any() in interrupt context" has been added to the 4.14-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

    ntb_netdev: Use dev_kfree_skb_any() in interrupt context

to the 4.14-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:
     ntb_netdev-use-dev_kfree_skb_any-in-interrupt-contex.patch
and it can be found in the queue-4.14 subdirectory.

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



commit d370a1b1b9be6a8f76021a16daf088f20ae72bbe
Author: Eric Pilmore <epilmore@xxxxxxxxxx>
Date:   Thu Dec 8 16:06:59 2022 -0800

    ntb_netdev: Use dev_kfree_skb_any() in interrupt context
    
    [ Upstream commit 5f7d78b2b12a9d561f48fa00bab29b40f4616dad ]
    
    TX/RX callback handlers (ntb_netdev_tx_handler(),
    ntb_netdev_rx_handler()) can be called in interrupt
    context via the DMA framework when the respective
    DMA operations have completed. As such, any calls
    by these routines to free skb's, should use the
    interrupt context safe dev_kfree_skb_any() function.
    
    Previously, these callback handlers would call the
    interrupt unsafe version of dev_kfree_skb(). This has
    not presented an issue on Intel IOAT DMA engines as
    that driver utilizes tasklets rather than a hard
    interrupt handler, like the AMD PTDMA DMA driver.
    On AMD systems, a kernel WARNING message is
    encountered, which is being issued from
    skb_release_head_state() due to in_hardirq()
    being true.
    
    Besides the user visible WARNING from the kernel,
    the other symptom of this bug was that TCP/IP performance
    across the ntb_netdev interface was very poor, i.e.
    approximately an order of magnitude below what was
    expected. With the repair to use dev_kfree_skb_any(),
    kernel WARNINGs from skb_release_head_state() ceased
    and TCP/IP performance, as measured by iperf, was on
    par with expected results, approximately 20 Gb/s on
    AMD Milan based server. Note that this performance
    is comparable with Intel based servers.
    
    Fixes: 765ccc7bc3d91 ("ntb_netdev: correct skb leak")
    Fixes: 548c237c0a997 ("net: Add support for NTB virtual ethernet device")
    Signed-off-by: Eric Pilmore <epilmore@xxxxxxxxxx>
    Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20221209000659.8318-1-epilmore@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c
index 5f941e20f199..beab00c273b2 100644
--- a/drivers/net/ntb_netdev.c
+++ b/drivers/net/ntb_netdev.c
@@ -140,7 +140,7 @@ static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_data,
 enqueue_again:
 	rc = ntb_transport_rx_enqueue(qp, skb, skb->data, ndev->mtu + ETH_HLEN);
 	if (rc) {
-		dev_kfree_skb(skb);
+		dev_kfree_skb_any(skb);
 		ndev->stats.rx_errors++;
 		ndev->stats.rx_fifo_errors++;
 	}
@@ -195,7 +195,7 @@ static void ntb_netdev_tx_handler(struct ntb_transport_qp *qp, void *qp_data,
 		ndev->stats.tx_aborted_errors++;
 	}
 
-	dev_kfree_skb(skb);
+	dev_kfree_skb_any(skb);
 
 	if (ntb_transport_tx_free_entry(dev->qp) >= tx_start) {
 		/* Make sure anybody stopping the queue after this sees the new



[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