700-3-6-e1000e-Fix-queue-interrupt-re-raising-in-Other-interrupt.diff 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. From patchwork Mon Mar 5 21:40:27 2018
  2. Content-Type: text/plain; charset="utf-8"
  3. MIME-Version: 1.0
  4. Content-Transfer-Encoding: 7bit
  5. Subject: [net, v2,
  6. 3/6] e1000e: Fix queue interrupt re-raising in Other interrupt
  7. X-Patchwork-Submitter: "Kirsher, Jeffrey T" <[email protected]>
  8. X-Patchwork-Id: 881775
  9. X-Patchwork-Delegate: [email protected]
  10. Message-Id: <[email protected]>
  11. To: [email protected]
  12. Cc: Benjamin Poirier <[email protected]>, [email protected],
  13. [email protected], [email protected], [email protected],
  14. Jeff Kirsher <[email protected]>
  15. Date: Mon, 5 Mar 2018 13:40:27 -0800
  16. From: Jeff Kirsher <[email protected]>
  17. List-Id: <netdev.vger.kernel.org>
  18. From: Benjamin Poirier <[email protected]>
  19. Restores the ICS write for Rx/Tx queue interrupts which was present before
  20. commit 16ecba59bc33 ("e1000e: Do not read ICR in Other interrupt", v4.5-rc1)
  21. but was not restored in commit 4aea7a5c5e94
  22. ("e1000e: Avoid receiver overrun interrupt bursts", v4.15-rc1).
  23. This re-raises the queue interrupts in case the txq or rxq bits were set in
  24. ICR and the Other interrupt handler read and cleared ICR before the queue
  25. interrupt was raised.
  26. Fixes: 4aea7a5c5e94 ("e1000e: Avoid receiver overrun interrupt bursts")
  27. Signed-off-by: Benjamin Poirier <[email protected]>
  28. Acked-by: Alexander Duyck <[email protected]>
  29. Tested-by: Aaron Brown <[email protected]>
  30. Signed-off-by: Jeff Kirsher <[email protected]>
  31. ---
  32. drivers/net/ethernet/intel/e1000e/netdev.c | 3 +++
  33. 1 file changed, 3 insertions(+)
  34. --- a/drivers/net/ethernet/intel/e1000e/netdev.c
  35. +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
  36. @@ -1915,6 +1915,9 @@ static irqreturn_t e1000_msix_other(int
  37. icr = er32(ICR);
  38. ew32(ICR, E1000_ICR_OTHER);
  39. + if (icr & adapter->eiac_mask)
  40. + ew32(ICS, (icr & adapter->eiac_mask));
  41. +
  42. if (icr & E1000_ICR_LSC) {
  43. ew32(ICR, E1000_ICR_LSC);
  44. hw->mac.get_link_status = true;