On 17/06/2026 0:59, Andrew Lunn wrote:
This does not seem like the right direction to me.
The "Detected Hardware Unit Hang" print does not indicate that the interface
is dead, but that the transmitter is stalled.
This can be due to an unusually high load, or a HW fault / race condition
with another component, etc.
When a hang is detected, the transmitter is stopped with netif_stop_queue()
and eventually ndo_tx_timeout triggers a full reset to the device, which in
many cases recovers it from the hang.
Does a full reset cause the link to be negotiated again? If so, there
is no harm in setting the carrier down. If the reset is successful,
the carrier will be restored. However, if the reset does not recover
the system, does the carrier say down?
Andrew
The way it is written - a reset triggered by the Tx timeout path will go
through e1000e_reinit_locked(), which calls e1000e_down() followed by
e1000e_up().
e1000e_down() calls netif_carrier_off() at the start, and e1000e_reset()
later. e1000e_up() triggers a link state recheck, which should restore
the carrier.
So if everything works as it should, the change proposed here would be
both redundant and unnecessary. However, we have been getting reports of
these unrecoverable hangs from time-to-time, so I suspect things do not
always work as they should.
There is one issue under investigation at present, where a persistent
hang was reported following an aborted hibernation attempt. We are
testing a patch against it.
I did not see anything in the original description of this report tying
the hang to a power state change, but I will happily share the patch
once we get preliminary positive results.
--Dima