]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
e1000: Rework em_msi_link interrupt filter
authorKevin Bowling <kbowling@FreeBSD.org>
Sun, 25 Apr 2021 08:22:23 +0000 (01:22 -0700)
committerKevin Bowling <kbowling@FreeBSD.org>
Fri, 28 May 2021 05:50:07 +0000 (22:50 -0700)
commit1fb96c59b4ce265ea94eddef5a97c7c075ceaec5
tree00ba2399a377d48d047adf5c8958ba55c752bc36
parente09d1b7ec46623194fd1bc838e788b6290e492c0
e1000: Rework em_msi_link interrupt filter

* Fix 82574 Link Status Changes, carrying the OTHER mask bit around as
  needed.
* Move igb-class LSC re-arming out of FAST back into the handler.
* Clarify spurious/other interrupt re-arms in FAST.

In MSI-X mode, 82574 and igb-class devices use an interrupt filter to
handle Link Status Changes. We want to do LSC re-arms in the handler
to take advantage of autoclear (EIAC) single shot behavior.

82574 uses 'Other' in ICR and IMS for LSC interrupt types when in MSI-X
mode, so we need to set and re-arm the 'Other' bit during attach and
after ICR reads in the FAST handler if not an LSC or after handling on
LSC due to autoclearing.

This work was primarily done to address the referenced PR, but inspired
some clarification and improvement for igb-class devices once the
intentions of previous bug fix attempts became clearer.

PR: 211219
Reported by: Alexey <aserp3@gmail.com>
Tested by: kbowling (I210 lagg), markj (I210)
Approved by: markj
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D29943

(cherry picked from commit eea55de7b10808b86277d7fdbed2d05d3c6db1b2)
sys/dev/e1000/if_em.c
sys/dev/e1000/if_em.h