[PATCH] arm64: smp: Fix missing IPI statistics

Jinjie Ruan posted 1 patch 1 year, 5 months ago
There is a newer version of this series
arch/arm64/kernel/smp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH] arm64: smp: Fix missing IPI statistics
Posted by Jinjie Ruan 1 year, 5 months ago
commit 83cfac95c018 ("genirq: Allow interrupts to be excluded from
/proc/interrupts") is to avoid IPIs appear twice in /proc/interrupts.
But the commit 331a1b3a836c ("arm64: smp: Add arch support for backtrace
using pseudo-NMI") and commit 2f5cd0c7ffde("arm64: kgdb: Implement
kgdb_roundup_cpus() to enable pseudo-NMI roundup") set CPU_BACKTRACE and
KGDB_ROUNDUP IPIs "IRQ_HIDDEN" flag but not show them in
arch_show_interrupts(), which cause the interrupt kstat_irqs accounting
is missing in display.

Before this patch, CPU_BACKTRACE and KGDB_ROUNDUP IPIs are missing:
	/ # cat /proc/interrupts
	           CPU0       CPU1       CPU2       CPU3
	 11:        466        600        309        332     GICv3  27 Level     arch_timer
	 13:         24          0          0          0     GICv3  33 Level     uart-pl011
	 15:         64          0          0          0     GICv3  78 Edge      virtio0
	 16:          0          0          0          0     GICv3  79 Edge      virtio1
	 17:          0          0          0          0     GICv3  34 Level     rtc-pl031
	 18:          3          3          3          3     GICv3  23 Level     arm-pmu
	 19:          0          0          0          0 9030000.pl061   3 Edge      GPIO Key Poweroff
	IPI0:         7         14          9         26       Rescheduling interrupts
	IPI1:       354         93        233        255       Function call interrupts
	IPI2:         0          0          0          0       CPU stop interrupts
	IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
	IPI4:         0          0          0          0       Timer broadcast interrupts
	IPI5:         1          0          0          0       IRQ work interrupts
	Err:          0

After this pacth, CPU_BACKTRACE and KGDB_ROUNDUP IPIs are displayed:
	/ # cat /proc/interrupts
	           CPU0       CPU1       CPU2       CPU3
	 11:        393        281        532        449     GICv3  27 Level     arch_timer
	 13:         15          0          0          0     GICv3  33 Level     uart-pl011
	 15:         64          0          0          0     GICv3  78 Edge      virtio0
	 16:          0          0          0          0     GICv3  79 Edge      virtio1
	 17:          0          0          0          0     GICv3  34 Level     rtc-pl031
	 18:          2          2          2          2     GICv3  23 Level     arm-pmu
	 19:          0          0          0          0 9030000.pl061   3 Edge      GPIO Key Poweroff
	IPI0:        11         19          4         23       Rescheduling interrupts
	IPI1:       279        347        222         72       Function call interrupts
	IPI2:         0          0          0          0       CPU stop interrupts
	IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
	IPI4:         0          0          0          0       Timer broadcast interrupts
	IPI5:         1          0          0          1       IRQ work interrupts
	IPI6:         0          0          0          0       CPU backtrace interrupts
	IPI7:         0          0          0          0       KGDB roundup interrupts
	Err:          0

Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Suggested-by: Doug Anderson <dianders@chromium.org>
---
v2:
- Report them in arch_show_interrupts().
- Add suggested-by.
- Update the commit message.
---
 arch/arm64/kernel/smp.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 31c8b3094dd7..5de85dccc09c 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -767,13 +767,15 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 	}
 }
 
-static const char *ipi_types[NR_IPI] __tracepoint_string = {
+static const char *ipi_types[MAX_IPI] __tracepoint_string = {
 	[IPI_RESCHEDULE]	= "Rescheduling interrupts",
 	[IPI_CALL_FUNC]		= "Function call interrupts",
 	[IPI_CPU_STOP]		= "CPU stop interrupts",
 	[IPI_CPU_CRASH_STOP]	= "CPU stop (for crash dump) interrupts",
 	[IPI_TIMER]		= "Timer broadcast interrupts",
 	[IPI_IRQ_WORK]		= "IRQ work interrupts",
+	[IPI_CPU_BACKTRACE]	= "CPU backtrace interrupts",
+	[IPI_KGDB_ROUNDUP]	= "KGDB roundup interrupts",
 };
 
 static void smp_cross_call(const struct cpumask *target, unsigned int ipinr);
@@ -784,7 +786,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
 {
 	unsigned int cpu, i;
 
-	for (i = 0; i < NR_IPI; i++) {
+	for (i = 0; i < MAX_IPI; i++) {
 		seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
 			   prec >= 4 ? " " : "");
 		for_each_online_cpu(cpu)
-- 
2.34.1
Re: [PATCH] arm64: smp: Fix missing IPI statistics
Posted by Doug Anderson 1 year, 5 months ago
Hi,

On Wed, Jun 19, 2024 at 11:31 PM Jinjie Ruan <ruanjinjie@huawei.com> wrote:
>
> commit 83cfac95c018 ("genirq: Allow interrupts to be excluded from
> /proc/interrupts") is to avoid IPIs appear twice in /proc/interrupts.
> But the commit 331a1b3a836c ("arm64: smp: Add arch support for backtrace
> using pseudo-NMI") and commit 2f5cd0c7ffde("arm64: kgdb: Implement
> kgdb_roundup_cpus() to enable pseudo-NMI roundup") set CPU_BACKTRACE and
> KGDB_ROUNDUP IPIs "IRQ_HIDDEN" flag but not show them in
> arch_show_interrupts(), which cause the interrupt kstat_irqs accounting
> is missing in display.
>
> Before this patch, CPU_BACKTRACE and KGDB_ROUNDUP IPIs are missing:
>         / # cat /proc/interrupts
>                    CPU0       CPU1       CPU2       CPU3
>          11:        466        600        309        332     GICv3  27 Level     arch_timer
>          13:         24          0          0          0     GICv3  33 Level     uart-pl011
>          15:         64          0          0          0     GICv3  78 Edge      virtio0
>          16:          0          0          0          0     GICv3  79 Edge      virtio1
>          17:          0          0          0          0     GICv3  34 Level     rtc-pl031
>          18:          3          3          3          3     GICv3  23 Level     arm-pmu
>          19:          0          0          0          0 9030000.pl061   3 Edge      GPIO Key Poweroff
>         IPI0:         7         14          9         26       Rescheduling interrupts
>         IPI1:       354         93        233        255       Function call interrupts
>         IPI2:         0          0          0          0       CPU stop interrupts
>         IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
>         IPI4:         0          0          0          0       Timer broadcast interrupts
>         IPI5:         1          0          0          0       IRQ work interrupts
>         Err:          0
>
> After this pacth, CPU_BACKTRACE and KGDB_ROUNDUP IPIs are displayed:
>         / # cat /proc/interrupts
>                    CPU0       CPU1       CPU2       CPU3
>          11:        393        281        532        449     GICv3  27 Level     arch_timer
>          13:         15          0          0          0     GICv3  33 Level     uart-pl011
>          15:         64          0          0          0     GICv3  78 Edge      virtio0
>          16:          0          0          0          0     GICv3  79 Edge      virtio1
>          17:          0          0          0          0     GICv3  34 Level     rtc-pl031
>          18:          2          2          2          2     GICv3  23 Level     arm-pmu
>          19:          0          0          0          0 9030000.pl061   3 Edge      GPIO Key Poweroff
>         IPI0:        11         19          4         23       Rescheduling interrupts
>         IPI1:       279        347        222         72       Function call interrupts
>         IPI2:         0          0          0          0       CPU stop interrupts
>         IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
>         IPI4:         0          0          0          0       Timer broadcast interrupts
>         IPI5:         1          0          0          1       IRQ work interrupts
>         IPI6:         0          0          0          0       CPU backtrace interrupts
>         IPI7:         0          0          0          0       KGDB roundup interrupts
>         Err:          0
>
> Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
> Suggested-by: Doug Anderson <dianders@chromium.org>
> ---
> v2:
> - Report them in arch_show_interrupts().
> - Add suggested-by.
> - Update the commit message.
> ---
>  arch/arm64/kernel/smp.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)

Personally I don't find a ton of value in having the "CPU backtrace
interrupts" and "KGDB roundup interrupts" reported, but I agree that
if someone does find value in having them reported that this is the
best way. I guess that means a light:

Reviewed-by: Douglas Anderson <dianders@chromium.org>