Skip to content

Commit

Permalink
e1000: restore netif_poll_enable call but make sure IRQs are off
Browse files Browse the repository at this point in the history
This restores the previously removed netif_poll_enable call in e1000_open.
It's needed on all but the first call to e1000_open for a NIC as
e1000_close always calls netif_poll_disable.

netif_poll_enable can only be called safely if no polls have been
scheduled.  This should be the case as long as we don't enter our IRQ
handler.

In order to guarantee this we explicitly disable IRQs as early as possible
when we're probing the NIC.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Cc: "Kok, Auke" <auke-jan.h.kok@intel.com>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Herbert Xu authored and Jeff Garzik committed May 30, 2007
1 parent 8a32352 commit 4731305
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion drivers/net/e1000/e1000_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1325,7 +1325,10 @@ e1000_sw_init(struct e1000_adapter *adapter)
spin_lock_init(&adapter->tx_queue_lock);
#endif

atomic_set(&adapter->irq_sem, 1);
/* Explicitly disable IRQ since the NIC can be in any state. */
atomic_set(&adapter->irq_sem, 0);
e1000_irq_disable(adapter);

spin_lock_init(&adapter->stats_lock);

set_bit(__E1000_DOWN, &adapter->flags);
Expand Down Expand Up @@ -1431,6 +1434,10 @@ e1000_open(struct net_device *netdev)
/* From here on the code is the same as e1000_up() */
clear_bit(__E1000_DOWN, &adapter->flags);

#ifdef CONFIG_E1000_NAPI
netif_poll_enable(netdev);
#endif

e1000_irq_enable(adapter);

/* fire a link status change interrupt to start the watchdog */
Expand Down

0 comments on commit 4731305

Please sign in to comment.