Re: [PATCH RFC net 0/6] net: macb: fix TX stalls, IRQ storms and a lost NCR update on link-up

From: Nicolai Buchwitz

Date: Thu Oct 22 2026 - 06:01:46 EST


Hi Steffen

On 22.10.2026 11:38, Steffen Dirkwinkel wrote:
Hello Théo, Christian, all,

I've been looking at RCU and TX stalls on macb devices (Xilinx ZynqMP on
Beckhoff CX9240) for a while and have been carrying downstream patches
similar to Christian's. A while ago I let Claude try to reproduce this on my
devices, it was able to reproduce and found some fixes but I wasn't
happy with the quality of the patches and my understanding of them. I
briefly talked to Théo in Prague and he suggested I send what I have as
either the patches or the reproducers may be useful for ideas.
I've finally gotten around to it and also ran some more testing and improved
the patches in the meantime. The series includes Christian's patches in the
original form (should also at least be reworded) and I also have Patch 1 in here
since the bench seems to have reproduced the issue on hardware (see below).

If anyone has other ideas / patches for these issues I'm also happy to
run tests on devices.

Thanks for posting this RFC. I will go later through the details, but wanted to let you
know that I'm also investigating the macb watchdog issue on RPi RP1 [1].

Yesterday Théo also shared some findings in the thread.

Three things from that work which touch your series:

- Patch 3 changes the IER write in macb_tx_poll() that I need a readl after. The write
is posted, a TCOMP landing between the ring check and the write reaching the MAC is
lost. That seems to be the RP1 stall, masking TXUBR does not change it.
The two patches need ordering.

- The watchdog only recovers a lost TSTART. With a missed completion TBQP == tx_head and
macb_tx_restart() does nothing, the queue never comes back. I have a patch that
schedules TX NAPI from macb_tx_timeout() when the tail descriptor has TX_USED set.

- RP1 has a single TX queue, so the starvation from patch 6 is not what we see.

I can run the series on an RP1 board with my reproducer if that helps.

[1] https://github.com/raspberrypi/linux/issues/7661#issuecomment-6322904343

[...]

Thanks,
Nicolai