From 3e54db3f15a93a28e771e798e7a26d91dc84212e Mon Sep 17 00:00:00 2001 From: Bhadram Varka Date: Mon, 31 May 2021 20:49:25 +0530 Subject: [PATCH] nvethernet: Disable VM interrupts unconditionally Issue: Observed that VM interrupts continuously fired if previous NAPI schedule not able to complete the poll function. This case observed more frequently if Tx coalescing enabled. Fix: Disable VM interrupts whether NAPI scheduled or not. Also uses IRQ-OFF variant for NAPI schedule since IRQ's already masked. Bug 200722499 Change-Id: If6fb694c43a1c11efb4f4b881b9fb08dec834917 Signed-off-by: Bhadram Varka Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2537503 Reviewed-by: Rakesh Goyal Reviewed-by: Narayan Reddy --- .../ethernet/nvidia/nvethernet/ether_linux.c | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c index 676973bc..a7c12d5e 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c @@ -869,21 +869,25 @@ irqreturn_t ether_vm_isr(int irq, void *data) if (txrx) { rx_napi = pdata->rx_napi[chan]; + + osi_handle_dma_intr(osi_dma, chan, + OSI_DMA_CH_RX_INTR, + OSI_DMA_INTR_DISABLE); + if (likely(napi_schedule_prep(&rx_napi->napi))) { - osi_handle_dma_intr(osi_dma, chan, - OSI_DMA_CH_RX_INTR, - OSI_DMA_INTR_DISABLE); /* TODO: Schedule NAPI on different CPU core */ - __napi_schedule(&rx_napi->napi); + __napi_schedule_irqoff(&rx_napi->napi); } } else { tx_napi = pdata->tx_napi[chan]; + + osi_handle_dma_intr(osi_dma, chan, + OSI_DMA_CH_TX_INTR, + OSI_DMA_INTR_DISABLE); + if (likely(napi_schedule_prep(&tx_napi->napi))) { - osi_handle_dma_intr(osi_dma, chan, - OSI_DMA_CH_TX_INTR, - OSI_DMA_INTR_DISABLE); /* TODO: Schedule NAPI on different CPU core */ - __napi_schedule(&tx_napi->napi); + __napi_schedule_irqoff(&tx_napi->napi); } }