diff options
author | Mykyta Iziumtsev <mykyta.iziumtsev@linaro.org> | 2017-10-19 16:35:31 +0200 |
---|---|---|
committer | Mykyta Iziumtsev <mykyta.iziumtsev@linaro.org> | 2017-10-19 16:37:00 +0200 |
commit | 4887258ef5425fb3e3c4dd99ea9f7c1d01990c6e (patch) | |
tree | 075a1844689c3125014bef43dd6cd400fb55752c /kernel/4.13.0/e1000e/netdev.c | |
parent | b1a13abb1fa6caeed3098d17dbd281d29db7d170 (diff) |
Work in progress: 2017-10-192017-10-19
Diffstat (limited to 'kernel/4.13.0/e1000e/netdev.c')
-rw-r--r-- | kernel/4.13.0/e1000e/netdev.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/kernel/4.13.0/e1000e/netdev.c b/kernel/4.13.0/e1000e/netdev.c index 5892d07..fd28d38 100644 --- a/kernel/4.13.0/e1000e/netdev.c +++ b/kernel/4.13.0/e1000e/netdev.c @@ -2246,11 +2246,11 @@ static void e1000_irq_enable(struct e1000_adapter *adapter) if (adapter->msix_entries) { ew32(EIAC_82574, adapter->eiac_mask & E1000_EIAC_MASK_82574); - ew32(IMS, adapter->eiac_mask | E1000_IMS_LSC); + ew32(IMS, ~adapter->irq_mask & (adapter->eiac_mask | E1000_IMS_LSC)); } else if (hw->mac.type >= e1000_pch_lpt) { - ew32(IMS, IMS_ENABLE_MASK | E1000_IMS_ECCER); + ew32(IMS, ~adapter->irq_mask & (IMS_ENABLE_MASK | E1000_IMS_ECCER)); } else { - ew32(IMS, IMS_ENABLE_MASK); + ew32(IMS, ~adapter->irq_mask & IMS_ENABLE_MASK); } e1e_flush(); } @@ -4202,7 +4202,7 @@ void e1000e_reset(struct e1000_adapter *adapter) * * Fire a link status change interrupt to start the watchdog. **/ -static void e1000e_trigger_lsc(struct e1000_adapter *adapter) +void e1000e_trigger_lsc(struct e1000_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; @@ -4219,13 +4219,12 @@ void e1000e_up(struct e1000_adapter *adapter) clear_bit(__E1000_DOWN, &adapter->state); - if (!test_bit(__E1000_VFIO_NET, &adapter->state)) { - if (adapter->msix_entries) - e1000_configure_msix(adapter); - e1000_irq_enable(adapter); + if (adapter->msix_entries) + e1000_configure_msix(adapter); + e1000_irq_enable(adapter); + if (!test_bit(__E1000_VFIO_NET, &adapter->state)) { netif_start_queue(adapter->netdev); - e1000e_trigger_lsc(adapter); } } @@ -5926,8 +5925,10 @@ static void e1000_tx_timeout(struct net_device *netdev) struct e1000_adapter *adapter = netdev_priv(netdev); /* Do the reset outside of interrupt context */ - adapter->tx_timeout_count++; - schedule_work(&adapter->reset_task); + if (!test_bit(__E1000_VFIO_NET, &adapter->state)) { + adapter->tx_timeout_count++; + schedule_work(&adapter->reset_task); + } } static void e1000_reset_task(struct work_struct *work) |