diff options
| author | Kevin Bowling <kbowling@FreeBSD.org> | 2026-08-16 07:10:09 +0000 |
|---|---|---|
| committer | Kevin Bowling <kbowling@FreeBSD.org> | 2026-08-24 09:51:38 +0000 |
| commit | e7aa5a5a3f690f49488f89e01444ba1bcebc427b (patch) | |
| tree | 112c37f186567f4ead21a1caa225b624b8776ebb /sys/modules/dcons/(developers-only) | |
| parent | 74019bc3ea91f7a1dfd36acbc1627f3d00ca002f (diff) | |
The 82579 PCIm2PCI arbiter can acknowledge a host MAC CSR write while
the Management Engine is accessing another CSR. The host write can be
lost; subsequent target accesses may no longer be claimed by the MAC and
can hang the system.
For 82579 controllers with valid management firmware, wait for the ME
CSR access indication before every MAC CSR write. Keep the wait bounded
and use DELAY because writes occur in interrupt and datapath contexts.
Verify every transmit and receive tail write. If a tail does not hold
the requested value, disable its datapath direction and request a full
iflib reset.
Keep the ordinary register-write path as a direct MMIO write behind a
predicted per-device gate. Contain the wait and tail recovery in the
82579 slow path rather than adding tail-specific accessors and state to
the rest of the e1000 family.
Documentation on the PCH NICs is scare so Intel's Linux e1000e fixes
publicly document the hardware failure and required serialization as
commits bdc125f73f3c and d601afcae2fe. This implementation is a bit
cleaner.
Tested on a Thinkpad T430 (82579LM) with a test kernel to simulate ME
contention without incident as well as lost tail writes causing a
succesful recovery.
MFC after: 2 weeks
Sponsored by: BBOX.io
Diffstat (limited to 'sys/modules/dcons/(developers-only)')
0 files changed, 0 insertions, 0 deletions
