aboutsummaryrefslogtreecommitdiff
path: root/kernel/4.13.0/e1000e/netdev.c
diff options
context:
space:
mode:
authorMykyta Iziumtsev <mykyta.iziumtsev@linaro.org>2017-10-19 16:35:31 +0200
committerMykyta Iziumtsev <mykyta.iziumtsev@linaro.org>2017-10-19 16:37:00 +0200
commit4887258ef5425fb3e3c4dd99ea9f7c1d01990c6e (patch)
tree075a1844689c3125014bef43dd6cd400fb55752c /kernel/4.13.0/e1000e/netdev.c
parentb1a13abb1fa6caeed3098d17dbd281d29db7d170 (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.c23
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)