* Re: [PATCH] irqchip/gic-v3-its: Enable dynamic MSI-X allocation
[not found] <20260715035437.700601-1-yangjinqian1@huawei.com>
@ 2026-10-22 19:36 ` Vlad Poenaru
2026-10-23 12:16 ` Vlad Poenaru
0 siblings, 1 reply; 2+ messages in thread
From: Vlad Poenaru @ 2026-10-22 19:36 UTC (permalink / raw)
To: Jinqian Yang, Thomas Gleixner, Marc Zyngier
Cc: Lorenzo Pieralisi, Michael Chan, Pavan Chebbi, Jakub Kicinski,
Breno Leitao, Andrew Preece, netdev, linux-arm-kernel,
linux-kernel, regressions
Hi,
Commit 0d6a7c417983 ("irqchip/gic-v3-its: Enable dynamic MSI-X
allocation"), merged for v7.3-rc1, breaks bnxt_en on our loving Grace
machines. Reverting it fixes the problem on current mainline.
Hardware:
- NVIDIA Grace (Neoverse V2), ACPI, GICv3 + ITS
- Broadcom BCM57508 (BCM957508-N1200FJ), FW 230.0.165.3, bnxt_en
- The same platform with a Mellanox NIC (mlx5) is not affected
The trigger is a ring resize: a boot-time udev .link file with
RxBufferSize=max, i.e. "ethtool -G eth0 rx 4095 tx 4095". The close
path never gets the HWRM_RING_FREE completions, then TX times out and
the machine hangs:
[ 58.221] bnxt_en 0002:01:00.0 eth0: Resp cmpl intr err msg: 0x51
[ 58.221] bnxt_en 0002:01:00.0 eth0: hwrm_ring_free type 1 failed. rc:fffffff0 err:0
... (repeats every ~3.7s for every ring)
[ 215.539] bnxt_en 0002:01:00.0 eth0: NETDEV WATCHDOG: CPU: 69: transmit queue 18 timed out 5118 ms
[ 215.539] bnxt_en 0002:01:00.0 eth0: TX timeout detected, starting reset task!
Bisecting v7.2..v7.3-rc3 on this machine points at the irq-drivers
merge (8b5d31123f41), and within it:
good: 9023960b74ab ("irqchip: Remove redundant dev_err()/dev_err_probe()")
bad: 0d6a7c417983 ("irqchip/gic-v3-its: Enable dynamic MSI-X allocation")
On current mainline (f47d223627f8) the same machine fails at ~55s;
with the commit reverted it runs cleanly.
So far it only reproduces with our debug config (KASAN, lockdep,
DEBUG_PAGEALLOC, DMA_API_DEBUG, CPUMASK_OFFSTACK, ...), not with our
production config. I haven't narrowed down which option matters.
My guess is that with pci_msix_can_alloc_dyn() now true behind the ITS,
bnxt switches to dynamic MSI-X allocation and something on that path
loses the completion interrupts, but I haven't root-caused it.
Happy to test patches or collect more data.
Reported-by: Andrew Preece <apreece@meta.com>
#regzbot introduced: 0d6a7c417983b
Thanks,
Vlad
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Enable dynamic MSI-X allocation
2026-10-22 19:36 ` [PATCH] irqchip/gic-v3-its: Enable dynamic MSI-X allocation Vlad Poenaru
@ 2026-10-23 12:16 ` Vlad Poenaru
0 siblings, 0 replies; 2+ messages in thread
From: Vlad Poenaru @ 2026-10-23 12:16 UTC (permalink / raw)
To: Jinqian Yang, Thomas Gleixner, Marc Zyngier
Cc: Lorenzo Pieralisi, Michael Chan, Pavan Chebbi, Jakub Kicinski,
Breno Leitao, Andrew Preece, netdev, linux-arm-kernel,
linux-kernel, regressions
Two updates on this report.
First, a correction: it is not specific to our debug config. Our
production config hits it as well, on every Grace + BCM57508 machine
we tried, at the same point in boot.
Second, the root cause is in bnxt_en, and this commit only exposes it.
When the channel count is raised, bnxt_check_rings() allocates the
extra MSI-X vectors before firmware has reserved them for the
function. On BCM57508, writes to MSI-X table entries beyond the
reserved IRQs don't stick, so the message written when the vectors
are activated is lost, and the entries stay zero after the
reservation.
x86 never notices because GENERIC_IRQ_RESERVATION_MODE makes the PCI
MSI domains MSI_FLAG_MUST_REACTIVATE and the message is written again
at request_irq() time. With this commit, arm64 GICv3 takes the same
dynamic path but writes the message only once, at allocation.
Instrumenting the driver showed it directly. After the channel count
went from 18 to 32, MSI-X entries 18-31 read back as all zero, while
the cached msi_msg and the ITS LPI mapping were correct. Exactly the
14 rings on those vectors lost their completions.
The fix is posted to netdev:
https://lore.kernel.org/all/20261023121321.2127263-1-vlad.wing@gmail.com/
With it, the same machine runs cleanly through the channel change and
the ring resize. I don't think the ITS change needs to be reverted.
#regzbot monitor: https://lore.kernel.org/all/20261023121321.2127263-1-vlad.wing@gmail.com/
Thanks,
Vlad
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-23 12:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260715035437.700601-1-yangjinqian1@huawei.com>
2026-10-22 19:36 ` [PATCH] irqchip/gic-v3-its: Enable dynamic MSI-X allocation Vlad Poenaru
2026-10-23 12:16 ` Vlad Poenaru
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox