Re: [patch v2 04/14] x86/irq: Make irqstats array based

From: Radu Rendec

Date: Mon Mar 23 2026 - 15:32:46 EST


On Fri, 2026-03-20 at 14:21 +0100, Thomas Gleixner wrote:
> Having the x86 specific interrupt statistics as a data structure with
> individual members instead of an array is just stupid as it requires
> endless copy and paste in arch_show_interrupts() and arch_irq_stat_cpu(),
> where the latter does not even take the latest interrupt additions into
> account. The resulting #ifdef orgy is just disgusting.
>
> Convert it to an array of counters, which does not make a difference in the
> actual interrupt hotpath increment as the array index is constant and
> therefore not any different than the member based access.
>
> But in arch_show_interrupts() and arch_irq_stat_cpu() this just turns into
> a loop, which reduces the text size by ~2k (~12%):
>
>    text    data     bss     dec     hex filename
>   19643   15250     904   35797    8bd5 ../build/arch/x86/kernel/irq.o
>   17355   15250     904   33509    82e5 ../build/arch/x86/kernel/irq.o
>
> Adding a new vector or software counter only requires to update the table
> and everything just works. Using the core provided emit function which
> speeds up 0 outputs makes it significantly faster.
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxx>
> ---
> V2: Simplified and extended vector skip mechanism
>     Fixup the typoes - Micheal, Dmitry
>     Added the lost precision back for ERR/MIS - Dmitry
> ---

In the interest of keeping this email readable, I removed the diff part
and I'm commenting below every file in the diffstat section.

>  arch/x86/events/amd/core.c          |    2
>  arch/x86/events/amd/ibs.c           |    2
>  arch/x86/events/core.c              |    2
>  arch/x86/events/intel/core.c        |    2
>  arch/x86/events/intel/knc.c         |    2
>  arch/x86/events/intel/p4.c          |    2
>  arch/x86/events/zhaoxin/core.c      |    2
>  arch/x86/hyperv/hv_init.c           |    2
>  arch/x86/include/asm/hardirq.h      |   69 +++++-----

I believe this breaks scripts/gdb/linux/interrupts.py, particularly the
x86_show_irqstat() function, which still expects individual members in
struct irq_cpustat_t.

>  arch/x86/include/asm/irq.h          |    2
>  arch/x86/include/asm/mce.h          |    3
>  arch/x86/kernel/apic/apic.c         |    4
>  arch/x86/kernel/apic/ipi.c          |    2
>  arch/x86/kernel/cpu/acrn.c          |    2
>  arch/x86/kernel/cpu/mce/amd.c       |    2
>  arch/x86/kernel/cpu/mce/core.c      |    8 -
>  arch/x86/kernel/cpu/mce/threshold.c |    2
>  arch/x86/kernel/cpu/mshyperv.c      |    4
>  arch/x86/kernel/irq.c               |  247 ++++++++++++------------------------

Nit: This moves the description text by one more space to the left (in
addition to the one in patch 1), and now the description is no longer
aligned to the generic interrupts.

>  arch/x86/kernel/irq_work.c          |    2
>  arch/x86/kernel/irqinit.c           |    2
>  arch/x86/kernel/kvm.c               |    2
>  arch/x86/kernel/nmi.c               |    4
>  arch/x86/kernel/smp.c               |    6
>  arch/x86/mm/tlb.c                   |    2
>  arch/x86/xen/enlighten_hvm.c        |    2
>  arch/x86/xen/enlighten_pv.c         |    2
>  arch/x86/xen/smp.c                  |    6
>  arch/x86/xen/smp_pv.c               |    2
>  29 files changed, 158 insertions(+), 233 deletions(-)