Re: [PATCH] PCI: iproc-msi: Bound events handled per IRQ

From: Florian Fainelli

Date: Thu Oct 29 2026 - 17:30:37 EST


On 10/16/26 05:18, 'Eugen Hristev' via BCM-KERNEL-FEEDBACK-LIST,PDL wrote:
Limit each iProc MSI parent IRQ to 16 event-queue entries.

A continuously fed queue could otherwise keep the chained handler running
and starve other work. The budget still drains pending events and lets the
next parent interrupt continue processing, improving fairness and bounding
interrupt-handler latency.

Without this starvation avoidance, one CPU can stall indefinitely
in the loop and not serve other interrupts, timers, etc.

While testing it with an Ethernet NIC, when too many MSI interrupts
come in, CPU might get starved:

Connecting to host 192.168.30.1, port 5201
[ 5] local 192.168.30.2 port 52586 connected to 192.168.30.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 240 MBytes 2.01 Gbits/sec 2 334 KBytes
[ 5] 1.00-2.00 sec 63.2 MBytes 531 Mbits/sec 1 1.41 KBytes
[ 5] 2.00-3.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 3.00-4.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 4.00-5.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 0 1.41 KBytes
[ 177.568497] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
[ 177.568913] rcu: 0-...!: (1 GPs behind) idle=28ac/1/0x4000000000000002 softirq=28922/28930 fqs=1
[ 177.569457] rcu: (detected by 1, t=5256 jiffies, g=21629, q=819 ncpus=4)
[ 177.569870] Sending NMI from CPU 1 to CPUs 0:

With this bounded approach, IRQ handler will complete and continue
to serve MSI events on the next handler invocation.

Assisted-by: Github Copilot
Signed-off-by: Eugen Hristev <ehristev@xxxxxxxxxx>

Reviewed-by: Florian Fainelli <florian.fainelli@xxxxxxxxxxxx>
--
Florian