aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorshemminger@osdl.org <shemminger@osdl.org>2006-08-28 13:00:48 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-29 17:18:30 -0400
commitbb507fe11ffda19eee158ce0be42d222135b7aca (patch)
treec31b9bcd880dd4f214ec705e9a4cbaefa95e63f9 /drivers
parent97bda706b475655088201d7bb96cb8dd6d0d1aa3 (diff)
[PATCH] sky2: MSI test timing
The test for MSI IRQ could have timing issues. The PCI write needs to be pushed out before waiting, and the wait queue should be initialized before the IRQ. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/sky2.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 6cc5696e9a3e..2a2adc23f6ae 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -3189,6 +3189,8 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw)
3189 struct pci_dev *pdev = hw->pdev; 3189 struct pci_dev *pdev = hw->pdev;
3190 int err; 3190 int err;
3191 3191
3192 init_waitqueue_head (&hw->msi_wait);
3193
3192 sky2_write32(hw, B0_IMSK, Y2_IS_IRQ_SW); 3194 sky2_write32(hw, B0_IMSK, Y2_IS_IRQ_SW);
3193 3195
3194 err = request_irq(pdev->irq, sky2_test_intr, IRQF_SHARED, DRV_NAME, hw); 3196 err = request_irq(pdev->irq, sky2_test_intr, IRQF_SHARED, DRV_NAME, hw);
@@ -3198,10 +3200,8 @@ static int __devinit sky2_test_msi(struct sky2_hw *hw)
3198 return err; 3200 return err;
3199 } 3201 }
3200 3202
3201 init_waitqueue_head (&hw->msi_wait);
3202
3203 sky2_write8(hw, B0_CTST, CS_ST_SW_IRQ); 3203 sky2_write8(hw, B0_CTST, CS_ST_SW_IRQ);
3204 wmb(); 3204 sky2_read8(hw, B0_CTST);
3205 3205
3206 wait_event_timeout(hw->msi_wait, hw->msi_detected, HZ/10); 3206 wait_event_timeout(hw->msi_wait, hw->msi_detected, HZ/10);
3207 3207