diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2010-01-07 12:41:00 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-08 04:02:19 -0500 |
commit | 7f081d405adb5f905db11c6449319ab7c670722e (patch) | |
tree | 5314958fbd1f1a4c41f92e40ca089a425f78a9ff /drivers/net/igb/igb_main.c | |
parent | 959d20bfe8b90023c862dec3956054027a5a0912 (diff) |
igb: add support for device reset interrupt
This patch adds support for the global device reset interrupt. Without
this change the drivers will report tx hangs on all ports when a global
device reset occurs.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/igb/igb_main.c')
-rw-r--r-- | drivers/net/igb/igb_main.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 484fbc83739f..e959b88be314 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -4110,6 +4110,9 @@ static irqreturn_t igb_msix_other(int irq, void *data) | |||
4110 | u32 icr = rd32(E1000_ICR); | 4110 | u32 icr = rd32(E1000_ICR); |
4111 | /* reading ICR causes bit 31 of EICR to be cleared */ | 4111 | /* reading ICR causes bit 31 of EICR to be cleared */ |
4112 | 4112 | ||
4113 | if (icr & E1000_ICR_DRSTA) | ||
4114 | schedule_work(&adapter->reset_task); | ||
4115 | |||
4113 | if (icr & E1000_ICR_DOUTSYNC) { | 4116 | if (icr & E1000_ICR_DOUTSYNC) { |
4114 | /* HW is reporting DMA is out of sync */ | 4117 | /* HW is reporting DMA is out of sync */ |
4115 | adapter->stats.doosync++; | 4118 | adapter->stats.doosync++; |
@@ -4733,6 +4736,9 @@ static irqreturn_t igb_intr_msi(int irq, void *data) | |||
4733 | 4736 | ||
4734 | igb_write_itr(q_vector); | 4737 | igb_write_itr(q_vector); |
4735 | 4738 | ||
4739 | if (icr & E1000_ICR_DRSTA) | ||
4740 | schedule_work(&adapter->reset_task); | ||
4741 | |||
4736 | if (icr & E1000_ICR_DOUTSYNC) { | 4742 | if (icr & E1000_ICR_DOUTSYNC) { |
4737 | /* HW is reporting DMA is out of sync */ | 4743 | /* HW is reporting DMA is out of sync */ |
4738 | adapter->stats.doosync++; | 4744 | adapter->stats.doosync++; |
@@ -4772,6 +4778,9 @@ static irqreturn_t igb_intr(int irq, void *data) | |||
4772 | if (!(icr & E1000_ICR_INT_ASSERTED)) | 4778 | if (!(icr & E1000_ICR_INT_ASSERTED)) |
4773 | return IRQ_NONE; | 4779 | return IRQ_NONE; |
4774 | 4780 | ||
4781 | if (icr & E1000_ICR_DRSTA) | ||
4782 | schedule_work(&adapter->reset_task); | ||
4783 | |||
4775 | if (icr & E1000_ICR_DOUTSYNC) { | 4784 | if (icr & E1000_ICR_DOUTSYNC) { |
4776 | /* HW is reporting DMA is out of sync */ | 4785 | /* HW is reporting DMA is out of sync */ |
4777 | adapter->stats.doosync++; | 4786 | adapter->stats.doosync++; |