From: Greg Kroah-Hartman Date: Mon, 14 Oct 2024 14:06:46 +0000 (+0200) Subject: 5.15-stable patches X-Git-Tag: v5.10.227~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a7848a1be57e99b5d3ed16281a54cdb6a1ef6504;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: net-xilinx-axienet-schedule-napi-in-two-steps.patch --- 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 index 00000000000..82e9adf2d2c --- /dev/null +++ b/queue-5.15/net-xilinx-axienet-schedule-napi-in-two-steps.patch @@ -0,0 +1,55 @@ +From ba0da2dc934ec5ac32bbeecbd0670da16ba03565 Mon Sep 17 00:00:00 2001 +From: Sean Anderson +Date: Fri, 13 Sep 2024 10:57:11 -0400 +Subject: net: xilinx: axienet: Schedule NAPI in two steps + +From: Sean Anderson + +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 +Reviewed-by: Shannon Nelson +Reviewed-by: Eric Dumazet +Link: https://patch.msgid.link/20240913145711.2284295-1-sean.anderson@linux.dev +Signed-off-by: Paolo Abeni +Signed-off-by: Greg Kroah-Hartman +--- + 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; diff --git a/queue-5.15/series b/queue-5.15/series index ffe8745e48c..1e113e8d1b5 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -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