Commit df814d96 authored by David S. Miller's avatar David S. Miller

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue

Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates 2015-03-20

This series contains updates to ixgb, e1000e, igb and igbvf.

Eliezer and Todd provide patches to fix a potential issue found during code
inspection.  When bringing down an interface netif_carrier_off() should
be one of the first things we do, since this will prevent the stack from
queueing more packets to this interface.

Yanir provides a fix for e1000e that was found in validating i219,
where the call to e1000e_write_protect_nvm_ich8lan() is no longer
supported in newer hardware.  Access to these registers causes a
system freeze in early steppings and is ignored in later steppings.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c6f15070 784401bf
...@@ -4084,6 +4084,8 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset) ...@@ -4084,6 +4084,8 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset)
*/ */
set_bit(__E1000_DOWN, &adapter->state); set_bit(__E1000_DOWN, &adapter->state);
netif_carrier_off(netdev);
/* disable receives in the hardware */ /* disable receives in the hardware */
rctl = er32(RCTL); rctl = er32(RCTL);
if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
...@@ -4108,8 +4110,6 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset) ...@@ -4108,8 +4110,6 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset)
del_timer_sync(&adapter->watchdog_timer); del_timer_sync(&adapter->watchdog_timer);
del_timer_sync(&adapter->phy_info_timer); del_timer_sync(&adapter->phy_info_timer);
netif_carrier_off(netdev);
spin_lock(&adapter->stats64_lock); spin_lock(&adapter->stats64_lock);
e1000e_update_stats(adapter); e1000e_update_stats(adapter);
spin_unlock(&adapter->stats64_lock); spin_unlock(&adapter->stats64_lock);
...@@ -6874,7 +6874,8 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -6874,7 +6874,8 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto err_hw_init; goto err_hw_init;
if ((adapter->flags & FLAG_IS_ICH) && if ((adapter->flags & FLAG_IS_ICH) &&
(adapter->flags & FLAG_READ_ONLY_NVM)) (adapter->flags & FLAG_READ_ONLY_NVM) &&
(hw->mac.type < e1000_pch_spt))
e1000e_write_protect_nvm_ich8lan(&adapter->hw); e1000e_write_protect_nvm_ich8lan(&adapter->hw);
hw->mac.ops.get_bus_info(&adapter->hw); hw->mac.ops.get_bus_info(&adapter->hw);
......
...@@ -1776,6 +1776,7 @@ void igb_down(struct igb_adapter *adapter) ...@@ -1776,6 +1776,7 @@ void igb_down(struct igb_adapter *adapter)
wr32(E1000_RCTL, rctl & ~E1000_RCTL_EN); wr32(E1000_RCTL, rctl & ~E1000_RCTL_EN);
/* flush and sleep below */ /* flush and sleep below */
netif_carrier_off(netdev);
netif_tx_stop_all_queues(netdev); netif_tx_stop_all_queues(netdev);
/* disable transmits in the hardware */ /* disable transmits in the hardware */
...@@ -1797,12 +1798,9 @@ void igb_down(struct igb_adapter *adapter) ...@@ -1797,12 +1798,9 @@ void igb_down(struct igb_adapter *adapter)
} }
} }
del_timer_sync(&adapter->watchdog_timer); del_timer_sync(&adapter->watchdog_timer);
del_timer_sync(&adapter->phy_info_timer); del_timer_sync(&adapter->phy_info_timer);
netif_carrier_off(netdev);
/* record the stats before reset*/ /* record the stats before reset*/
spin_lock(&adapter->stats64_lock); spin_lock(&adapter->stats64_lock);
igb_update_stats(adapter, &adapter->stats64); igb_update_stats(adapter, &adapter->stats64);
......
...@@ -1519,6 +1519,7 @@ void igbvf_down(struct igbvf_adapter *adapter) ...@@ -1519,6 +1519,7 @@ void igbvf_down(struct igbvf_adapter *adapter)
rxdctl = er32(RXDCTL(0)); rxdctl = er32(RXDCTL(0));
ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE); ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE);
netif_carrier_off(netdev);
netif_stop_queue(netdev); netif_stop_queue(netdev);
/* disable transmits in the hardware */ /* disable transmits in the hardware */
...@@ -1535,8 +1536,6 @@ void igbvf_down(struct igbvf_adapter *adapter) ...@@ -1535,8 +1536,6 @@ void igbvf_down(struct igbvf_adapter *adapter)
del_timer_sync(&adapter->watchdog_timer); del_timer_sync(&adapter->watchdog_timer);
netif_carrier_off(netdev);
/* record the stats before reset*/ /* record the stats before reset*/
igbvf_update_stats(adapter); igbvf_update_stats(adapter);
......
...@@ -285,6 +285,8 @@ ixgb_down(struct ixgb_adapter *adapter, bool kill_watchdog) ...@@ -285,6 +285,8 @@ ixgb_down(struct ixgb_adapter *adapter, bool kill_watchdog)
/* prevent the interrupt handler from restarting watchdog */ /* prevent the interrupt handler from restarting watchdog */
set_bit(__IXGB_DOWN, &adapter->flags); set_bit(__IXGB_DOWN, &adapter->flags);
netif_carrier_off(netdev);
napi_disable(&adapter->napi); napi_disable(&adapter->napi);
/* waiting for NAPI to complete can re-enable interrupts */ /* waiting for NAPI to complete can re-enable interrupts */
ixgb_irq_disable(adapter); ixgb_irq_disable(adapter);
...@@ -298,7 +300,6 @@ ixgb_down(struct ixgb_adapter *adapter, bool kill_watchdog) ...@@ -298,7 +300,6 @@ ixgb_down(struct ixgb_adapter *adapter, bool kill_watchdog)
adapter->link_speed = 0; adapter->link_speed = 0;
adapter->link_duplex = 0; adapter->link_duplex = 0;
netif_carrier_off(netdev);
netif_stop_queue(netdev); netif_stop_queue(netdev);
ixgb_reset(adapter); ixgb_reset(adapter);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment