diff mbox series

arm64: smp: Fix missing IPI statistics

Message ID 20240607074716.4068975-1-ruanjinjie@huawei.com (mailing list archive)
State New, archived
Headers show
Series arm64: smp: Fix missing IPI statistics | expand

Commit Message

Jinjie Ruan June 7, 2024, 7:47 a.m. UTC
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.

Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
 arch/arm64/kernel/smp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Doug Anderson June 7, 2024, 4:02 p.m. UTC | #1
Hi,

On Fri, Jun 7, 2024 at 12:45 AM 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.
>
> Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
> ---
>  arch/arm64/kernel/smp.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

While I won't object to your patch if everyone agrees that we want it,
fully excluding "cpu backtrace" and "kgdb roundup" from
/proc/interrupts was more of a design decision than a bug. Those two
IPIs are really special cases and not something that I'd expect anyone
to care about knowing the count of. Keeping them out of
"/proc/interrupts" just avoids noise. I'd also note that I believe
arm32 makes the same design choice for "cpu backtrace".

In any case, if we truly think people want the count of these IPIs
then it feels like we should report them in arch_show_interrupts()
where we can give them a nice string.

-Doug
Jinjie Ruan June 14, 2024, 2:48 a.m. UTC | #2
On 2024/6/8 0:02, Doug Anderson wrote:
> Hi,
> 
> On Fri, Jun 7, 2024 at 12:45 AM 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.
>>
>> Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
>> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
>> ---
>>  arch/arm64/kernel/smp.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> While I won't object to your patch if everyone agrees that we want it,

Hello, What's everyone's opinion?

> fully excluding "cpu backtrace" and "kgdb roundup" from
> /proc/interrupts was more of a design decision than a bug. Those two
> IPIs are really special cases and not something that I'd expect anyone
> to care about knowing the count of. Keeping them out of
> "/proc/interrupts" just avoids noise. I'd also note that I believe
> arm32 makes the same design choice for "cpu backtrace".

Yes, arm32 is same as arm64.

> 
> In any case, if we truly think people want the count of these IPIs
> then it feels like we should report them in arch_show_interrupts()
> where we can give them a nice string.

That's a good idea.

> 
> -Doug
Will Deacon June 19, 2024, 1:32 p.m. UTC | #3
On Fri, Jun 07, 2024 at 03:47:16PM +0800, Jinjie Ruan 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.
> 
> Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
> ---
>  arch/arm64/kernel/smp.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index 31c8b3094dd7..7f9a5cf0f3b8 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -1039,7 +1039,8 @@ void __init set_smp_ipi_range(int ipi_base, int n)
>  		}
>  
>  		ipi_desc[i] = irq_to_desc(ipi_base + i);
> -		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
> +		if (i < NR_IPI)
> +			irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
>  	}

Please can you show the contents of /proc/interrupts before and after
this patch and put that in the commit message? I'm not seeing how the
two new IPIs get picked up by arch_show_interrupts().

Thanks,

Will
Jinjie Ruan June 20, 2024, 3:52 a.m. UTC | #4
On 2024/6/19 21:32, Will Deacon wrote:
> On Fri, Jun 07, 2024 at 03:47:16PM +0800, Jinjie Ruan 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.
>>
>> Fixes: 331a1b3a836c ("arm64: smp: Add arch support for backtrace using pseudo-NMI")
>> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
>> ---
>>  arch/arm64/kernel/smp.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
>> index 31c8b3094dd7..7f9a5cf0f3b8 100644
>> --- a/arch/arm64/kernel/smp.c
>> +++ b/arch/arm64/kernel/smp.c
>> @@ -1039,7 +1039,8 @@ void __init set_smp_ipi_range(int ipi_base, int n)
>>  		}
>>  
>>  		ipi_desc[i] = irq_to_desc(ipi_base + i);
>> -		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
>> +		if (i < NR_IPI)
>> +			irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
>>  	}
> 
> Please can you show the contents of /proc/interrupts before and after
> this patch and put that in the commit message? I'm not seeing how the
> two new IPIs get picked up by arch_show_interrupts().


Before this patch, CPU_BACKTRACE and KGDB_ROUNDUP IPIs are missing as below:

/ # cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
 11:        463        656        243        654     GICv3  27 Level
arch_timer
 13:         14          0          0          0     GICv3  33 Level
uart-pl011
 17:          0          0          0          0   ITS-MSI 16384 Edge
  virtio2-config
 18:          0          5          0          0   ITS-MSI 16385 Edge
  virtio2-input
 19:         68          0          0          0     GICv3  78 Edge
virtio0
 20:          0          0          0          0     GICv3  79 Edge
virtio1
 21:          0          0          0          0     GICv3  34 Level
rtc-pl031
 22:          2          2          2          2     GICv3  23 Level
arm-pmu
 23:          0          0          0          0   ITS-MSI 32768 Edge
  virtio3-config
 24:          0          0          0          0   ITS-MSI 32769 Edge
  virtio3-requests
 25:          0          0          0          0 9030000.pl061   3 Edge
    GPIO Key Poweroff
IPI0:        15         13          5         21       Rescheduling
interrupts
IPI1:       385        129        282        194       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 patch the hwirq6/7 IPI is also displayed:

/ # cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  7:          0          0          0          0     GICv3   6 Edge      IPI
  8:          0          0          0          0     GICv3   7 Edge      IPI
 11:        414        433        424        422     GICv3  27 Level
arch_timer
 13:         21          0          0          0     GICv3  33 Level
uart-pl011
 17:          0          0          0          0   ITS-MSI 16384 Edge
  virtio2-config
 18:          0          6          0          0   ITS-MSI 16385 Edge
  virtio2-input
 19:         60          0          0          0     GICv3  78 Edge
virtio0
 20:          0          0          0          0     GICv3  79 Edge
virtio1
 21:          0          0          0          0     GICv3  34 Level
rtc-pl031
 22:          3          3          3          3     GICv3  23 Level
arm-pmu
 23:          0          0          0          0   ITS-MSI 32768 Edge
  virtio3-config
 24:          0          0          0          0   ITS-MSI 32769 Edge
  virtio3-requests
 25:          0          0          0          0 9030000.pl061   3 Edge
    GPIO Key Poweroff
IPI0:        15         13         19         12       Rescheduling
interrupts
IPI1:       241        162        328        252       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:         0          1          0          0       IRQ work interrupts
Err:          0


> 
> Thanks,
> 
> Will
diff mbox series

Patch

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 31c8b3094dd7..7f9a5cf0f3b8 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -1039,7 +1039,8 @@  void __init set_smp_ipi_range(int ipi_base, int n)
 		}
 
 		ipi_desc[i] = irq_to_desc(ipi_base + i);
-		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
+		if (i < NR_IPI)
+			irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
 	}
 
 	ipi_irq_base = ipi_base;