aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb/igb_main.c
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2010-01-07 12:41:00 -0500
committerDavid S. Miller <davem@davemloft.net>2010-01-08 04:02:19 -0500
commit7f081d405adb5f905db11c6449319ab7c670722e (patch)
tree5314958fbd1f1a4c41f92e40ca089a425f78a9ff /drivers/net/igb/igb_main.c
parent959d20bfe8b90023c862dec3956054027a5a0912 (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.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 484fbc83739..e959b88be31 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++;