aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff')
-rw-r--r--target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff50
1 files changed, 50 insertions, 0 deletions
diff --git a/target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff b/target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff
new file mode 100644
index 0000000000..8ad13ba69a
--- /dev/null
+++ b/target/linux/generic/backport-4.14/700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff
@@ -0,0 +1,50 @@
+From patchwork Mon Mar 5 21:40:27 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [net, v2,
+ 3/6] e1000e: Fix queue interrupt re-raising in Other interrupt
+X-Patchwork-Submitter: "Kirsher, Jeffrey T" <jeffrey.t.kirsher@intel.com>
+X-Patchwork-Id: 881775
+X-Patchwork-Delegate: davem@davemloft.net
+Message-Id: <20180305214030.25141-4-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:27 -0800
+From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+List-Id: <netdev.vger.kernel.org>
+
+From: Benjamin Poirier <bpoirier@suse.com>
+
+Restores the ICS write for Rx/Tx queue interrupts which was present before
+commit 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt", v4.5-rc1)
+but was not restored in commit 4aea7a5c5e94
+("e1000e: Avoid receiver overrun interrupt bursts", v4.15-rc1).
+
+This re-raises the queue interrupts in case the txq or rxq bits were set in
+ICR and the Other interrupt handler read and cleared ICR before the queue
+interrupt was raised.
+
+Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts")
+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 | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/net/ethernet/intel/e1000e/netdev.c
++++ b/drivers/net/ethernet/intel/e1000e/netdev.c
+@@ -1915,6 +1915,9 @@ static irqreturn_t e1000_msix_other(int
+ icr = er32(ICR);
+ ew32(ICR, E1000_ICR_OTHER);
+
++ if (icr & adapter->eiac_mask)
++ ew32(ICS, (icr & adapter->eiac_mask));
++
+ if (icr & E1000_ICR_LSC) {
+ ew32(ICR, E1000_ICR_LSC);
+ hw->mac.get_link_status = true;