diff options
author | shemminger@osdl.org <shemminger@osdl.org> | 2006-08-28 13:00:48 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-08-29 17:18:30 -0400 |
commit | bb507fe11ffda19eee158ce0be42d222135b7aca (patch) | |
tree | c31b9bcd880dd4f214ec705e9a4cbaefa95e63f9 /drivers/net/sky2.c | |
parent | 97bda706b475655088201d7bb96cb8dd6d0d1aa3 (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/net/sky2.c')
-rw-r--r-- | drivers/net/sky2.c | 6 |
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 | ||