sh_eth: do not call netif_start_queue() from sh_eth_dev_init()
Iff sh_eth_phy_start() call fails in sh_eth_open(), the netif_start_queue() call done by sh_eth_dev_init() is not undone. In order to deal with that, stop calling netif_start_queue() from there, so that it can be called only when the device is fully opened and sh_eth_dev_init() only deals with the hardware initialization, symmetrically to sh_eth_dev_exit()... Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d78a1f0845
Коммит
ad846aa52c
|
@ -1312,8 +1312,6 @@ static int sh_eth_dev_init(struct net_device *ndev, bool start)
|
|||
if (start) {
|
||||
/* Setting the Rx mode will start the Rx process. */
|
||||
sh_eth_write(ndev, EDRRR_R, EDRRR);
|
||||
|
||||
netif_start_queue(ndev);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -2261,6 +2259,8 @@ static int sh_eth_open(struct net_device *ndev)
|
|||
if (ret)
|
||||
goto out_free_irq;
|
||||
|
||||
netif_start_queue(ndev);
|
||||
|
||||
mdp->is_opened = 1;
|
||||
|
||||
return ret;
|
||||
|
@ -2304,6 +2304,8 @@ static void sh_eth_tx_timeout(struct net_device *ndev)
|
|||
|
||||
/* device init */
|
||||
sh_eth_dev_init(ndev, true);
|
||||
|
||||
netif_start_queue(ndev);
|
||||
}
|
||||
|
||||
/* Packet transmit function */
|
||||
|
|
Загрузка…
Ссылка в новой задаче