kernel: add pending e1000e fixes
[openwrt/openwrt.git] / target / linux / generic / pending-4.14 / 191-2-6-Partial-revert-e1000e-Avoid-receiver-overrun-interrupt-bursts.diff
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 (file)
index 0000000..2800e6f
--- /dev/null
@@ -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);
+               }