Skip to contentSkip to conversation

sky2: Serialize access to PCI config space

PATCH In review Mike McCormack 2 participants 3 messages Aug 9, 2009 – Aug 10, 2009

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sky2: Serialize access to PCI config space

Disable NAPI when powering up or down the phy, as sky2_err_intr
may also access the PCI config space.

---
 drivers/net/sky2.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
drivers/net/sky2.c +6 -1
index 8e05d29..824a319 100644
@@ -1448,7 +1448,9 @@ static int sky2_up(struct net_device *dev)
 	if (!sky2->rx_ring)
 		goto err_out;
 
+	napi_disable(&hw->napi);
 	sky2_mac_init(hw, port);
+	napi_enable(&hw->napi);
 
 	/* Register is number of 4K blocks on internal RAM buffer. */
 	ramsize = sky2_read8(hw, B2_E_0) * 4;
@@ -1880,13 +1882,16 @@ static int sky2_down(struct net_device *dev)
 	sky2_write32(hw, B0_IMSK, imask);
 	sky2_read32(hw, B0_IMSK);
 
+	/* after this, there should be no more interrupts for this port */
 	synchronize_irq(hw->pdev->irq);
-	napi_synchronize(&hw->napi);
+	napi_disable(&hw->napi);
 
 	spin_lock_bh(&sky2->phy_lock);
 	sky2_phy_power_down(hw, port);
 	spin_unlock_bh(&sky2->phy_lock);
 
+	napi_enable(&hw->napi);
+
 	/* turn off LED's */
 	sky2_write16(hw, B0_Y2LED, LED_STAT_OFF);
 
Signature · 1 line
1.5.6.5
#1 lore raw
Quoted 3 lines · On Sun, 09 Aug 2009 20:37:19 +0900 Mike McCormack <[email protected]> wrote:

Disable NAPI when powering up or down the phy, as sky2_err_intr
may also access the PCI config space.

Maybe, but any sky2_err interrupt is a serious condition that means hardware is being used incorrectly or dead.

#2 lore raw
In reply to Mike McCormack
Quoted 4 lines · On Sun, 09 Aug 2009 20:37:19 +0900 Mike McCormack <[email protected]> wrote:

Disable NAPI when powering up or down the phy, as sky2_err_intr
may also access the PCI config space.

Also access to PCI config is done through shared memory, so each access is atomic. The only issue is the stupid config write bit; this bit really doesn't protect from anything useful. Probably better to just always leave it TST_CFG_WRITE_ON.