diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-08-28 19:19:36 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-08-29 17:18:30 -0400 |
commit | 78bc218663e3bd6cbbaf6a363d2f88f17541adfb (patch) | |
tree | acbbd0e96fafb3a6332bbe9b31c483bb922fb886 /drivers/net/skge.c | |
parent | d38efdd65aaabd82374f386d0cc54de2ffc90af3 (diff) |
[PATCH] skge: pci bus post fixes
At the end of a critical section, we need to force the PCI write
to complete by doing a read.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r-- | drivers/net/skge.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index b8ebd9c7d40a..85296ba5eac2 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -2747,7 +2747,7 @@ static int skge_poll(struct net_device *dev, int *budget) | |||
2747 | spin_lock_irq(&hw->hw_lock); | 2747 | spin_lock_irq(&hw->hw_lock); |
2748 | hw->intr_mask |= rxirqmask[skge->port]; | 2748 | hw->intr_mask |= rxirqmask[skge->port]; |
2749 | skge_write32(hw, B0_IMSK, hw->intr_mask); | 2749 | skge_write32(hw, B0_IMSK, hw->intr_mask); |
2750 | mmiowb(); | 2750 | skge_read32(hw, B0_IMSK); |
2751 | spin_unlock_irq(&hw->hw_lock); | 2751 | spin_unlock_irq(&hw->hw_lock); |
2752 | 2752 | ||
2753 | return 0; | 2753 | return 0; |
@@ -2881,6 +2881,7 @@ static void skge_extirq(void *arg) | |||
2881 | spin_lock_irq(&hw->hw_lock); | 2881 | spin_lock_irq(&hw->hw_lock); |
2882 | hw->intr_mask |= IS_EXT_REG; | 2882 | hw->intr_mask |= IS_EXT_REG; |
2883 | skge_write32(hw, B0_IMSK, hw->intr_mask); | 2883 | skge_write32(hw, B0_IMSK, hw->intr_mask); |
2884 | skge_read32(hw, B0_IMSK); | ||
2884 | spin_unlock_irq(&hw->hw_lock); | 2885 | spin_unlock_irq(&hw->hw_lock); |
2885 | } | 2886 | } |
2886 | 2887 | ||
@@ -2955,6 +2956,7 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
2955 | skge_error_irq(hw); | 2956 | skge_error_irq(hw); |
2956 | 2957 | ||
2957 | skge_write32(hw, B0_IMSK, hw->intr_mask); | 2958 | skge_write32(hw, B0_IMSK, hw->intr_mask); |
2959 | skge_read32(hw, B0_IMSK); | ||
2958 | spin_unlock(&hw->hw_lock); | 2960 | spin_unlock(&hw->hw_lock); |
2959 | 2961 | ||
2960 | return IRQ_HANDLED; | 2962 | return IRQ_HANDLED; |
@@ -3424,6 +3426,7 @@ static void __devexit skge_remove(struct pci_dev *pdev) | |||
3424 | spin_lock_irq(&hw->hw_lock); | 3426 | spin_lock_irq(&hw->hw_lock); |
3425 | hw->intr_mask = 0; | 3427 | hw->intr_mask = 0; |
3426 | skge_write32(hw, B0_IMSK, 0); | 3428 | skge_write32(hw, B0_IMSK, 0); |
3429 | skge_read32(hw, B0_IMSK); | ||
3427 | spin_unlock_irq(&hw->hw_lock); | 3430 | spin_unlock_irq(&hw->hw_lock); |
3428 | 3431 | ||
3429 | skge_write16(hw, B0_LED, LED_STAT_OFF); | 3432 | skge_write16(hw, B0_LED, LED_STAT_OFF); |