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

Reply via email to