summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorAjay Gupta <ajayg@nvidia.com>2016-05-13 15:15:00 -0400
committerBharat Nihalani <bnihalani@nvidia.com>2016-05-14 00:35:39 -0400
commitedb10f001ec42bd70f0346e7fe319fbbbecda580 (patch)
tree13f8ae411d23fcc22c5c76a0ed0def6e7e5da2e1 /drivers/net
parent7eaa0463917830056a4aeba225a932a33345d7ef (diff)
net: eqos: fix bug in qinx calculation
qinx calculation assumed that irq numbers returned from platform_get_irq() will be linearly mapped based on hwirq. This is not the case with kernel v4.4. This leads wrong qinx and so there was a flood of interrupts causing soft lockup. Fixing by comparing actual values without any assumption of irq ordering. Bug 200195187 Change-Id: I80b9f9135606e37c4e25e7847d3ed972f4e7a586 Signed-off-by: Ajay Gupta <ajayg@nvidia.com> Reviewed-on: http://git-master/r/1147711 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: David Lim <dlim@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/nvidia/eqos/drv.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/ethernet/nvidia/eqos/drv.c b/drivers/net/ethernet/nvidia/eqos/drv.c
index 2c56f3bda..e2532a9b0 100644
--- a/drivers/net/ethernet/nvidia/eqos/drv.c
+++ b/drivers/net/ethernet/nvidia/eqos/drv.c
@@ -519,10 +519,14 @@ irqreturn_t eqos_ch_isr(int irq, void *device_id)
519 519
520 i = smp_processor_id(); 520 i = smp_processor_id();
521 521
522 if (irq < pdata->rx_irqs[0]) 522 if ((irq == pdata->rx_irqs[0]) || (irq == pdata->tx_irqs[0]))
523 qinx = irq - pdata->tx_irqs[0]; 523 qinx = 0;
524 else 524 else if ((irq == pdata->rx_irqs[1]) || (irq == pdata->tx_irqs[1]))
525 qinx = irq - pdata->rx_irqs[0]; 525 qinx = 1;
526 else if ((irq == pdata->rx_irqs[2]) || (irq == pdata->tx_irqs[2]))
527 qinx = 2;
528 else if ((irq == pdata->rx_irqs[3]) || (irq == pdata->tx_irqs[3]))
529 qinx = 3;
526 530
527 DBGPR("-->%s(): cpu=%d, chan=%d\n", __func__, i, qinx); 531 DBGPR("-->%s(): cpu=%d, chan=%d\n", __func__, i, qinx);
528 532