85 lines
3.1 KiB
Diff
85 lines
3.1 KiB
Diff
|
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);
|
||
|
}
|