diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-10-12 15:38:11 -0700 |
---|---|---|
committer | Chris Wright <chrisw@sous-sol.org> | 2006-11-03 17:33:44 -0800 |
commit | 15531084fa60dbedda5c2920bdc4b9e6882b5469 (patch) | |
tree | ffb0b72c0866a652593642a8c57635c904f3a219 /drivers | |
parent | f7bc3d8e19acb53487f969c4bf2c54109a972bac (diff) |
[PATCH] sky2: MSI test race and message
Make sure and do PCI reads after writes in the MSI test setup code.
Some motherboards don't implement MSI correctly. The driver handles this
but the warning is too verbose and overly cautious.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/sky2.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index c590c2de7574..a017504ebd84 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -3208,6 +3208,8 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw) struct pci_dev *pdev = hw->pdev; int err; + init_waitqueue_head (&hw->msi_wait); + sky2_write32(hw, B0_IMSK, Y2_IS_IRQ_SW); err = request_irq(pdev->irq, sky2_test_intr, IRQF_SHARED, DRV_NAME, hw); @@ -3217,18 +3219,15 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw) return err; } - init_waitqueue_head (&hw->msi_wait); - sky2_write8(hw, B0_CTST, CS_ST_SW_IRQ); - wmb(); + sky2_read8(hw, B0_CTST); wait_event_timeout(hw->msi_wait, hw->msi_detected, HZ/10); if (!hw->msi_detected) { /* MSI test failed, go back to INTx mode */ - printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, " - "switching to INTx mode. Please report this failure to " - "the PCI maintainer and include system chipset information.\n", + printk(KERN_INFO PFX "%s: No interrupt generated using MSI, " + "switching to INTx mode.\n", pci_name(pdev)); err = -EOPNOTSUPP; @@ -3236,6 +3235,7 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw) } sky2_write32(hw, B0_IMSK, 0); + sky2_read32(hw, B0_IMSK); free_irq(pdev->irq, hw); |