123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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" <[email protected]>
- X-Patchwork-Id: 881769
- X-Patchwork-Delegate: [email protected]
- Message-Id: <[email protected]>
- To: [email protected]
- Cc: Benjamin Poirier <[email protected]>, [email protected],
- [email protected], [email protected], [email protected],
- Jeff Kirsher <[email protected]>
- Date: Mon, 5 Mar 2018 13:40:26 -0800
- From: Jeff Kirsher <[email protected]>
- List-Id: <netdev.vger.kernel.org>
- From: Benjamin Poirier <[email protected]>
- 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 <[email protected]>
- Acked-by: Alexander Duyck <[email protected]>
- Tested-by: Aaron Brown <[email protected]>
- Signed-off-by: Jeff Kirsher <[email protected]>
- ---
- 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);
- }
|