diff options
author | Andy Gospodarek <andy@greyhouse.net> | 2008-02-15 17:05:25 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-02-23 23:55:01 -0500 |
commit | 6cb5e57701d355737f0bc9f94c0f80ed69a95b62 (patch) | |
tree | c4d4e715ba4c87a4518ed2dba7a11ce2186cb2bb /drivers/net/igb | |
parent | 5bd3670f31f1c58f500e55c4cdbc243fb4b2e3df (diff) |
igb: fix legacy mode irq issue
I booted an igb kernel with the option pci=nomsi and instantly noticed
that interrupts no longer worked on my igb device. I took a look at the
interrupt initialization and quickly discovered a comment stating:
"DO NOT USE EIAME or IAME in legacy mode"
It seemed a bit odd that bits to enable IAM were being set in legacy
interrupt mode, so I dropped out the following parts and interrupts
began working fine again.
[Updated code flow and a nitpick spelling error --Auke]
Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/igb')
-rw-r--r-- | drivers/net/igb/igb_main.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index bff280eff5e3..3480cc72467a 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -439,7 +439,7 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
439 | err = igb_request_msix(adapter); | 439 | err = igb_request_msix(adapter); |
440 | if (!err) { | 440 | if (!err) { |
441 | /* enable IAM, auto-mask, | 441 | /* enable IAM, auto-mask, |
442 | * DO NOT USE EIAME or IAME in legacy mode */ | 442 | * DO NOT USE EIAM or IAM in legacy mode */ |
443 | wr32(E1000_IAM, IMS_ENABLE_MASK); | 443 | wr32(E1000_IAM, IMS_ENABLE_MASK); |
444 | goto request_done; | 444 | goto request_done; |
445 | } | 445 | } |
@@ -465,14 +465,9 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
465 | err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, | 465 | err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, |
466 | netdev->name, netdev); | 466 | netdev->name, netdev); |
467 | 467 | ||
468 | if (err) { | 468 | if (err) |
469 | dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", | 469 | dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", |
470 | err); | 470 | err); |
471 | goto request_done; | ||
472 | } | ||
473 | |||
474 | /* enable IAM, auto-mask */ | ||
475 | wr32(E1000_IAM, IMS_ENABLE_MASK); | ||
476 | 471 | ||
477 | request_done: | 472 | request_done: |
478 | return err; | 473 | return err; |