diff options
| author | Paul Mackerras <paulus@samba.org> | 2008-06-16 00:53:25 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2008-06-16 00:53:25 -0400 |
| commit | a9653cf540d407fb75deb3db65a1be6c81d53ee0 (patch) | |
| tree | 075fb79746f1d74443c9a9062e73c26a6266b05c /drivers/net/smc91x.c | |
| parent | e80ac32767d0f781ac195c472d500a7451d3729a (diff) | |
| parent | 066519068ad2fbe98c7f45552b1f592903a9c8c8 (diff) | |
Merge branch 'linux-2.6' into merge
Diffstat (limited to 'drivers/net/smc91x.c')
| -rw-r--r-- | drivers/net/smc91x.c | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index a188e33484e6..f2051b209da2 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
| @@ -1016,15 +1016,8 @@ static void smc_phy_powerdown(struct net_device *dev) | |||
| 1016 | 1016 | ||
| 1017 | /* We need to ensure that no calls to smc_phy_configure are | 1017 | /* We need to ensure that no calls to smc_phy_configure are |
| 1018 | pending. | 1018 | pending. |
| 1019 | |||
| 1020 | flush_scheduled_work() cannot be called because we are | ||
| 1021 | running with the netlink semaphore held (from | ||
| 1022 | devinet_ioctl()) and the pending work queue contains | ||
| 1023 | linkwatch_event() (scheduled by netif_carrier_off() | ||
| 1024 | above). linkwatch_event() also wants the netlink semaphore. | ||
| 1025 | */ | 1019 | */ |
| 1026 | while(lp->work_pending) | 1020 | cancel_work_sync(&lp->phy_configure); |
| 1027 | yield(); | ||
| 1028 | 1021 | ||
| 1029 | bmcr = smc_phy_read(dev, phy, MII_BMCR); | 1022 | bmcr = smc_phy_read(dev, phy, MII_BMCR); |
| 1030 | smc_phy_write(dev, phy, MII_BMCR, bmcr | BMCR_PDOWN); | 1023 | smc_phy_write(dev, phy, MII_BMCR, bmcr | BMCR_PDOWN); |
| @@ -1161,7 +1154,6 @@ static void smc_phy_configure(struct work_struct *work) | |||
| 1161 | smc_phy_configure_exit: | 1154 | smc_phy_configure_exit: |
| 1162 | SMC_SELECT_BANK(lp, 2); | 1155 | SMC_SELECT_BANK(lp, 2); |
| 1163 | spin_unlock_irq(&lp->lock); | 1156 | spin_unlock_irq(&lp->lock); |
| 1164 | lp->work_pending = 0; | ||
| 1165 | } | 1157 | } |
| 1166 | 1158 | ||
| 1167 | /* | 1159 | /* |
| @@ -1389,11 +1381,8 @@ static void smc_timeout(struct net_device *dev) | |||
| 1389 | * smc_phy_configure() calls msleep() which calls schedule_timeout() | 1381 | * smc_phy_configure() calls msleep() which calls schedule_timeout() |
| 1390 | * which calls schedule(). Hence we use a work queue. | 1382 | * which calls schedule(). Hence we use a work queue. |
| 1391 | */ | 1383 | */ |
| 1392 | if (lp->phy_type != 0) { | 1384 | if (lp->phy_type != 0) |
| 1393 | if (schedule_work(&lp->phy_configure)) { | 1385 | schedule_work(&lp->phy_configure); |
| 1394 | lp->work_pending = 1; | ||
| 1395 | } | ||
| 1396 | } | ||
| 1397 | 1386 | ||
| 1398 | /* We can accept TX packets again */ | 1387 | /* We can accept TX packets again */ |
| 1399 | dev->trans_start = jiffies; | 1388 | dev->trans_start = jiffies; |
