diff options
author | Ajay Gupta <ajayg@nvidia.com> | 2016-05-13 15:15:00 -0400 |
---|---|---|
committer | Bharat Nihalani <bnihalani@nvidia.com> | 2016-05-14 00:35:39 -0400 |
commit | edb10f001ec42bd70f0346e7fe319fbbbecda580 (patch) | |
tree | 13f8ae411d23fcc22c5c76a0ed0def6e7e5da2e1 /drivers/net | |
parent | 7eaa0463917830056a4aeba225a932a33345d7ef (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.c | 12 |
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 | ||