[PATCH] e100: Synchronize interface link state with poll routine
Synchronize interface link state with e100 poll routine Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com> Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com> Signed-off-by: John Ronciak <john.ronciak@intel.com>
This commit is contained in:
parent
1f53367d5d
commit
0236ebb7ae
1 changed files with 7 additions and 2 deletions
|
@ -1743,8 +1743,11 @@ static int e100_up(struct nic *nic)
|
||||||
if((err = request_irq(nic->pdev->irq, e100_intr, SA_SHIRQ,
|
if((err = request_irq(nic->pdev->irq, e100_intr, SA_SHIRQ,
|
||||||
nic->netdev->name, nic->netdev)))
|
nic->netdev->name, nic->netdev)))
|
||||||
goto err_no_irq;
|
goto err_no_irq;
|
||||||
e100_enable_irq(nic);
|
|
||||||
netif_wake_queue(nic->netdev);
|
netif_wake_queue(nic->netdev);
|
||||||
|
netif_poll_enable(nic->netdev);
|
||||||
|
/* enable ints _after_ enabling poll, preventing a race between
|
||||||
|
* disable ints+schedule */
|
||||||
|
e100_enable_irq(nic);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_no_irq:
|
err_no_irq:
|
||||||
|
@ -1758,11 +1761,13 @@ static int e100_up(struct nic *nic)
|
||||||
|
|
||||||
static void e100_down(struct nic *nic)
|
static void e100_down(struct nic *nic)
|
||||||
{
|
{
|
||||||
|
/* wait here for poll to complete */
|
||||||
|
netif_poll_disable(nic->netdev);
|
||||||
|
netif_stop_queue(nic->netdev);
|
||||||
e100_hw_reset(nic);
|
e100_hw_reset(nic);
|
||||||
free_irq(nic->pdev->irq, nic->netdev);
|
free_irq(nic->pdev->irq, nic->netdev);
|
||||||
del_timer_sync(&nic->watchdog);
|
del_timer_sync(&nic->watchdog);
|
||||||
netif_carrier_off(nic->netdev);
|
netif_carrier_off(nic->netdev);
|
||||||
netif_stop_queue(nic->netdev);
|
|
||||||
e100_clean_cbs(nic);
|
e100_clean_cbs(nic);
|
||||||
e100_rx_clean_list(nic);
|
e100_rx_clean_list(nic);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue