aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff
diff options
context:
space:
mode:
authorStijn Tintel <stijn@linux-ipv6.be>2018-06-28 11:44:10 +0200
committerStijn Tintel <stijn@linux-ipv6.be>2018-08-09 11:49:48 +0200
commitbd451d46a695ed8ee1b96be25859612cd0085af8 (patch)
treee36f4933a6361659eb48c6a81c5869dd14b3091e /target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff
parentaeec1dd7bab6da7e231f43d0206c8a7bc1614919 (diff)
downloadupstream-bd451d46a695ed8ee1b96be25859612cd0085af8.tar.gz
upstream-bd451d46a695ed8ee1b96be25859612cd0085af8.tar.bz2
upstream-bd451d46a695ed8ee1b96be25859612cd0085af8.zip
kernel: add pending e1000e fixes
The previous round of fixes for the 82574 chip cause an issue with emulated e1000e devices in VMware ESXi 6.5. It also contains changes that are not strictly necessary. These patches fix the issues introduced in the previous series, revert the unnecessary changes to avoid unforeseen fallout, and avoid a case where interrupts can be missed. The final two patches of this series are already in the kernel, so no need to include them here. Patchwork: https://patchwork.ozlabs.org/cover/881776/ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> (cherry picked from commit ef025e6417abd608ee398039623ac8a306bb92c5)
Diffstat (limited to 'target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff')
-rw-r--r--target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff84
1 files changed, 84 insertions, 0 deletions
diff --git a/target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff b/target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff
new file mode 100644
index 0000000000..2800e6f8d8
--- /dev/null
+++ b/target/linux/generic/pending-4.14/191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff
@@ -0,0 +1,84 @@
+From patchwork Mon Mar 5 21:40:26 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [net, v2,
+ 2/6] Partial revert "e1000e: Avoid receiver overrun interrupt bursts"
+X-Patchwork-Submitter: "Kirsher, Jeffrey T" <jeffrey.t.kirsher@intel.com>
+X-Patchwork-Id: 881769
+X-Patchwork-Delegate: davem@davemloft.net
+Message-Id: <20180305214030.25141-3-jeffrey.t.kirsher@intel.com>
+To: davem@davemloft.net
+Cc: Benjamin Poirier <bpoirier@suse.com>, netdev@vger.kernel.org,
+ nhorman@redhat.com, sassmann@redhat.com, jogreene@redhat.com,
+ Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Date: Mon, 5 Mar 2018 13:40:26 -0800
+From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+List-Id: <netdev.vger.kernel.org>
+
+From: Benjamin Poirier <bpoirier@suse.com>
+
+This partially reverts commit 4aea7a5c5e940c1723add439f4088844cd26196d.
+
+We keep the fix for the first part of the problem (1) described in the log
+of that commit, that is to read ICR in the other interrupt handler. We
+remove the fix for the second part of the problem (2), Other interrupt
+throttling.
+
+Bursts of "Other" interrupts may once again occur during rxo (receive
+overflow) traffic conditions. This is deemed acceptable in the interest of
+avoiding unforeseen fallout from changes that are not strictly necessary.
+As discussed, the e1000e driver should be in "maintenance mode".
+
+Link: https://www.spinics.net/lists/netdev/msg480675.html
+Signed-off-by: Benjamin Poirier <bpoirier@suse.com>
+Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
+Tested-by: Aaron Brown <aaron.f.brown@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+---
+ drivers/net/ethernet/intel/e1000e/netdev.c | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/ethernet/intel/e1000e/netdev.c
++++ b/drivers/net/ethernet/intel/e1000e/netdev.c
+@@ -1911,21 +1911,10 @@ static irqreturn_t e1000_msix_other(int
+ struct e1000_adapter *adapter = netdev_priv(netdev);
+ struct e1000_hw *hw = &adapter->hw;
+ u32 icr;
+- bool enable = true;
+
+ icr = er32(ICR);
+ ew32(ICR, E1000_ICR_OTHER);
+
+- if (icr & E1000_ICR_RXO) {
+- ew32(ICR, E1000_ICR_RXO);
+- enable = false;
+- /* napi poll will re-enable Other, make sure it runs */
+- if (napi_schedule_prep(&adapter->napi)) {
+- adapter->total_rx_bytes = 0;
+- adapter->total_rx_packets = 0;
+- __napi_schedule(&adapter->napi);
+- }
+- }
+ if (icr & E1000_ICR_LSC) {
+ ew32(ICR, E1000_ICR_LSC);
+ hw->mac.get_link_status = true;
+@@ -1934,7 +1923,7 @@ static irqreturn_t e1000_msix_other(int
+ mod_timer(&adapter->watchdog_timer, jiffies + 1);
+ }
+
+- if (enable && !test_bit(__E1000_DOWN, &adapter->state))
++ if (!test_bit(__E1000_DOWN, &adapter->state))
+ ew32(IMS, E1000_IMS_OTHER);
+
+ return IRQ_HANDLED;
+@@ -2704,8 +2693,7 @@ static int e1000e_poll(struct napi_struc
+ napi_complete_done(napi, work_done);
+ if (!test_bit(__E1000_DOWN, &adapter->state)) {
+ if (adapter->msix_entries)
+- ew32(IMS, adapter->rx_ring->ims_val |
+- E1000_IMS_OTHER);
++ ew32(IMS, adapter->rx_ring->ims_val);
+ else
+ e1000_irq_enable(adapter);
+ }