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 <vbhadram@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2537503
Reviewed-by: Rakesh Goyal <rgoyal@nvidia.com>
Reviewed-by: Narayan Reddy <narayanr@nvidia.com>
This commit is contained in:
Bhadram Varka
2021-05-31 20:49:25 +05:30
committed by Revanth Kumar Uppala
parent 3e4fa7b56a
commit 3e54db3f15

View File

@@ -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);
}
}