lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 168/173] Partial revert "e1000e: Avoid receiver overrun interrupt bursts"
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Benjamin Poirier <bpoirier@suse.com>

    commit 1f0ea19722ef9dfa229a9540f70b8d1c34a98a6a upstream.

    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>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    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);
    }

    \
     
     \ /
      Last update: 2018-09-24 14:26    [W:3.728 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site