Re: [PATCH net 2/3] net: ethernet: ti: icssg_common: set irq_disabled after disabling TX IRQ
From: Siddharth Vadapalli
Date: Wed Feb 25 2026 - 06:30:49 EST
On 25/02/26 05:19, Jakub Kicinski wrote:
On Tue, 24 Feb 2026 17:54:18 +0530 Siddharth Vadapalli wrote:
CPU0
CPU1
----------------
--------------
1. TX HARD IRQ Handler entered NAPI TX
Handler is running
2. irq_disabled is
set Sees irq_disabled being set
3. Starts executing disable_irq_nosync() Invokes
enable_irq() for TX IRQ before its really disabled
Could you resend your last email fixing the line wrap issue? It's very
hard to read as it arrived on the list.
I have changed my email client now to fix the line wrap issue. Sorry for the inconvenience cause. I am repeating my earlier message below with proper formatting. It is in response to the following statement:
> AFAICT the flow on the Tx bug is not buggy, owner ship of the IRQ
> vector passes handler -> NAPI -> timer. I don't see how those can
> race.
The issue is seen in practice. Interrupt coalescing (hrtimer) isn't used.
The call sequence leading to the warning is:
net_rx_action
__napi_poll
NAPI TX Handler
It does seem strange that the 'net_rx_action' leads to the NAPI TX Handler.
However, it is exactly this path that causes the warning, and it is due to
this that we could end up in the following situation:
CPU0 CPU1
----------------------------- -----------------------------
1. TX HARD IRQ Handler entered NAPI TX Handler is running
2. irq_disabled is set to true Sees irq_disabled being true
3. Calls disable_irq_nosync() Calls enable_irq()
4. Enters disable_irq_nosync() [WARNING: Unbalanced enable for IRQ]
From what I gather you're concerned about the case when hard IRQ and
NAPI run in parallel. But I don't see how that could ever happen for
Tx (there are some complexities like netpoll and busy poll but those
will return false from napi_complete_done()).
Weirdly, net_rx_action() is leading to NAPI TX Handler.