Page MenuHomeFreeBSD

e1000: correctly set isc_pause_frames only when XOFF increases
ClosedPublic

Authored by jacob.e.keller_intel.com on Oct 1 2019, 11:44 PM.
Tags
None
Referenced Files
F143797666: D21868.id63370.diff
Sat, Jan 31, 2:10 PM
Unknown Object (File)
Thu, Jan 22, 12:19 PM
Unknown Object (File)
Thu, Jan 22, 9:43 AM
Unknown Object (File)
Sat, Jan 17, 7:20 AM
Unknown Object (File)
Nov 27 2025, 10:07 PM
Unknown Object (File)
Nov 24 2025, 11:16 PM
Unknown Object (File)
Nov 24 2025, 7:18 AM
Unknown Object (File)
Nov 23 2025, 10:23 PM
Subscribers

Details

Summary

The e1000 driver sets the iflib shared context isc_pause_frames value to
the number of received xoff frames. This is done so that the iflib
watchdog timer won't trigger a Tx Hang due to pause frames.

Unfortunately, the function simply sets it to the value of the xoffrxc
counter. Once the device has received a single XOFF packet, the driver
always reports that we received pause frames. This will prevent the Tx
hang detection entirely from that point on.

Fix this by assigning isc_pause_frames to a non-zero value if we
received any XOFF packets in the last timer interval.

We could attempt to calculate the total number of received packets by
doing a subtraction, but the iflib stack only seems to check if
isc_pause_frames is non-zero.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 26821
Build 25155: arc lint + arc unit