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 | |
| 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>
| -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); |
