]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2024 14:06:46 +0000 (16:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2024 14:06:46 +0000 (16:06 +0200)
added patches:
net-xilinx-axienet-schedule-napi-in-two-steps.patch

queue-5.15/net-xilinx-axienet-schedule-napi-in-two-steps.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/net-xilinx-axienet-schedule-napi-in-two-steps.patch b/queue-5.15/net-xilinx-axienet-schedule-napi-in-two-steps.patch
new file mode 100644 (file)
index 0000000..82e9adf
--- /dev/null
@@ -0,0 +1,55 @@
+From ba0da2dc934ec5ac32bbeecbd0670da16ba03565 Mon Sep 17 00:00:00 2001
+From: Sean Anderson <sean.anderson@linux.dev>
+Date: Fri, 13 Sep 2024 10:57:11 -0400
+Subject: net: xilinx: axienet: Schedule NAPI in two steps
+
+From: Sean Anderson <sean.anderson@linux.dev>
+
+commit ba0da2dc934ec5ac32bbeecbd0670da16ba03565 upstream.
+
+As advised by Documentation/networking/napi.rst, masking IRQs after
+calling napi_schedule can be racy. Avoid this by only masking/scheduling
+if napi_schedule_prep returns true.
+
+Fixes: 9e2bc267e780 ("net: axienet: Use NAPI for TX completion path")
+Fixes: cc37610caaf8 ("net: axienet: implement NAPI and GRO receive")
+Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
+Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Link: https://patch.msgid.link/20240913145711.2284295-1-sean.anderson@linux.dev
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/xilinx/xilinx_axienet_main.c |   14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
++++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+@@ -1070,9 +1070,10 @@ static irqreturn_t axienet_tx_irq(int ir
+               u32 cr = lp->tx_dma_cr;
+               cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK);
+-              axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr);
+-
+-              napi_schedule(&lp->napi_tx);
++              if (napi_schedule_prep(&lp->napi_tx)) {
++                      axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr);
++                      __napi_schedule(&lp->napi_tx);
++              }
+       }
+       return IRQ_HANDLED;
+@@ -1114,9 +1115,10 @@ static irqreturn_t axienet_rx_irq(int ir
+               u32 cr = lp->rx_dma_cr;
+               cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK);
+-              axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr);
+-
+-              napi_schedule(&lp->napi_rx);
++              if (napi_schedule_prep(&lp->napi_rx)) {
++                      axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr);
++                      __napi_schedule(&lp->napi_rx);
++              }
+       }
+       return IRQ_HANDLED;
index ffe8745e48cb474a6a62812ce1e994a7cbb67711..1e113e8d1b5d2199c99dff3ce58c8c0d2c443224 100644 (file)
@@ -694,3 +694,4 @@ netfilter-ip6t_rpfilter-fix-regression-with-vrf-interfaces.patch
 ext4-fix-warning-in-ext4_dio_write_end_io.patch
 net-axienet-start-napi-before-enabling-rx-tx.patch
 selftests-net-more-strict-check-in-net_helper.patch
+net-xilinx-axienet-schedule-napi-in-two-steps.patch