Skip to content

Commit

Permalink
netdev: bunch of drivers: avoid WARN at net/core/dev.c:1328
Browse files Browse the repository at this point in the history
The drivers were touching net queue before it has been started, so
without this patch, the drivers will potentially WARN at
net/core/dev.c:1328.

I don't have the hardware for the drivers below, so this patch is
untested, and thus should be carefully peer reviewed.

tc35815.c
au1000_eth.c
bfin_mac.c
macb.c
^ The four drivers are using phylib, they're calling netif_start_queue()
in open() callback. So trivially remove netif_tx_schedule_all().
Phylib will handle netif_carrier_*().

cpmac.c
fec_mpc52xx.c
fs_enet/fs_enet-main.c
sh_eth.c
^ The same as above, but these were also needlessly calling
netif_carrier_*() functions. So removed queue calls and also remove
carrier calls, since phylib will handle it. fs_enet-main.c also didn't
call netif_start_queue() at open(), this is fixed now.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Anton Vorontsov authored and David S. Miller committed Jul 22, 2008
1 parent 3d0f24a commit c8f1568
Show file tree
Hide file tree
Showing 8 changed files with 5 additions and 25 deletions.
5 changes: 2 additions & 3 deletions drivers/net/au1000_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -911,9 +911,8 @@ au1000_adjust_link(struct net_device *dev)
if(phydev->link != aup->old_link) {
// link state changed

if (phydev->link) // link went up
netif_tx_schedule_all(dev);
else { // link went down
if (!phydev->link) {
/* link went down */
aup->old_speed = 0;
aup->old_duplex = -1;
}
Expand Down
1 change: 0 additions & 1 deletion drivers/net/bfin_mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,6 @@ static void bfin_mac_adjust_link(struct net_device *dev)
if (!lp->old_link) {
new_state = 1;
lp->old_link = 1;
netif_tx_schedule_all(dev);
}
} else if (lp->old_link) {
new_state = 1;
Expand Down
2 changes: 0 additions & 2 deletions drivers/net/cpmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -945,10 +945,8 @@ static void cpmac_adjust_link(struct net_device *dev)
if (!priv->oldlink) {
new_state = 1;
priv->oldlink = 1;
netif_tx_schedule_all(dev);
}
} else if (priv->oldlink) {
netif_tx_stop_all_queues(dev);
new_state = 1;
priv->oldlink = 0;
priv->oldspeed = 0;
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/fec_mpc52xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,18 +197,13 @@ static void mpc52xx_fec_adjust_link(struct net_device *dev)
if (priv->link == PHY_DOWN) {
new_state = 1;
priv->link = phydev->link;
netif_tx_schedule_all(dev);
netif_carrier_on(dev);
netif_start_queue(dev);
}

} else if (priv->link) {
new_state = 1;
priv->link = PHY_DOWN;
priv->speed = 0;
priv->duplex = -1;
netif_stop_queue(dev);
netif_carrier_off(dev);
}

if (new_state && netif_msg_link(priv))
Expand Down
7 changes: 2 additions & 5 deletions drivers/net/fs_enet/fs_enet-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -738,9 +738,6 @@ static void generic_adjust_link(struct net_device *dev)
if (!fep->oldlink) {
new_state = 1;
fep->oldlink = 1;
netif_tx_schedule_all(dev);
netif_carrier_on(dev);
netif_start_queue(dev);
}

if (new_state)
Expand All @@ -750,8 +747,6 @@ static void generic_adjust_link(struct net_device *dev)
fep->oldlink = 0;
fep->oldspeed = 0;
fep->oldduplex = -1;
netif_carrier_off(dev);
netif_stop_queue(dev);
}

if (new_state && netif_msg_link(fep))
Expand Down Expand Up @@ -826,6 +821,8 @@ static int fs_enet_open(struct net_device *dev)
}
phy_start(fep->phydev);

netif_start_queue(dev);

return 0;
}

Expand Down
4 changes: 1 addition & 3 deletions drivers/net/macb.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,7 @@ static void macb_handle_link_change(struct net_device *dev)
}

if (phydev->link != bp->link) {
if (phydev->link)
netif_tx_schedule_all(dev);
else {
if (!phydev->link) {
bp->speed = 0;
bp->duplex = -1;
}
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/sh_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -642,17 +642,12 @@ static void sh_eth_adjust_link(struct net_device *ndev)
| ECMR_DM, ioaddr + ECMR);
new_state = 1;
mdp->link = phydev->link;
netif_tx_schedule_all(ndev);
netif_carrier_on(ndev);
netif_start_queue(ndev);
}
} else if (mdp->link) {
new_state = 1;
mdp->link = PHY_DOWN;
mdp->speed = 0;
mdp->duplex = -1;
netif_stop_queue(ndev);
netif_carrier_off(ndev);
}

if (new_state)
Expand Down
1 change: 0 additions & 1 deletion drivers/net/tc35815.c
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,6 @@ static void tc_handle_link_change(struct net_device *dev)
if (dev->flags & IFF_PROMISC)
tc35815_set_multicast_list(dev);
#endif
netif_tx_schedule_all(dev);
} else {
lp->speed = 0;
lp->duplex = -1;
Expand Down

0 comments on commit c8f1568

Please sign in to comment.