Show IPI statistics in arch_show_interrupts to help users
analysis IPI performance.
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
arch/mips/include/asm/ipi.h | 9 +++++++++
arch/mips/kernel/irq.c | 4 ++++
arch/mips/kernel/smp.c | 13 +++++++++++++
3 files changed, 26 insertions(+)
diff --git a/arch/mips/include/asm/ipi.h b/arch/mips/include/asm/ipi.h
index 0fc8c31c6a52..96c6e76d72c9 100644
--- a/arch/mips/include/asm/ipi.h
+++ b/arch/mips/include/asm/ipi.h
@@ -36,6 +36,7 @@ void mips_smp_ipi_disable(void);
extern bool mips_smp_ipi_have_virq_range(void);
void mips_smp_ipi_set_irqdomain(struct irq_domain *d);
extern void mips_smp_ipi_set_virq_range(int virq, int nr);
+extern void mips_smp_show_ipi_stats(struct seq_file *p, int prec);
#else
static inline void mips_smp_ipi_enable(void)
{
@@ -44,6 +45,10 @@ static inline void mips_smp_ipi_enable(void)
static inline void mips_smp_ipi_disable(void)
{
}
+
+static inline void mips_smp_show_ipi_stats(struct seq_file *p, int prec)
+{
+}
#endif /* CONFIG_GENERIC_IRQ_IPI */
#else
void mips_smp_ipi_set_virq_range(int virq, int nr)
@@ -58,5 +63,9 @@ static inline bool mips_smp_ipi_have_virq_range(void)
{
return false;
}
+
+static inline void mips_smp_show_ipi_stats(struct seq_file *p, int prec)
+{
+}
#endif /* CONFIG_SMP */
#endif
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
index 5e11582fe308..c3ea8d80e0cb 100644
--- a/arch/mips/kernel/irq.c
+++ b/arch/mips/kernel/irq.c
@@ -26,6 +26,8 @@
#include <linux/atomic.h>
#include <linux/uaccess.h>
+#include <asm/ipi.h>
+
void *irq_stack[NR_CPUS];
/*
@@ -42,6 +44,8 @@ atomic_t irq_err_count;
int arch_show_interrupts(struct seq_file *p, int prec)
{
seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count));
+ mips_smp_show_ipi_stats(p, prec);
+
return 0;
}
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index f29259d16a37..49be86e15b49 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -243,6 +243,19 @@ void mips_smp_ipi_disable(void)
disable_percpu_irq(ipi_virqs[i]);
}
+void mips_smp_show_ipi_stats(struct seq_file *p, int prec)
+{
+ unsigned int cpu, i;
+
+ for (i = 0; i < IPI_MAX; i++) {
+ seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
+ prec >= 4 ? " " : "");
+ for_each_online_cpu(cpu)
+ seq_printf(p, "%10u ", irq_desc_kstat_cpu(ipi_desc[i], cpu));
+ seq_printf(p, " %s\n", ipi_names[i]);
+ }
+}
+
static void smp_ipi_init_one(unsigned int virq, const char *name,
irq_handler_t handler)
{
--
2.45.2
Hi Jiaxun,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 0b58e108042b0ed28a71cd7edf5175999955b233]
url: https://github.com/intel-lab-lkp/linux/commits/Jiaxun-Yang/MIPS-smp-Make-IPI-interrupts-scalable/20240706-040839
base: 0b58e108042b0ed28a71cd7edf5175999955b233
patch link: https://lore.kernel.org/r/20240705-b4-mips-ipi-improvements-v2-5-2d50b56268e8%40flygoat.com
patch subject: [PATCH v2 05/10] MIPS: smp: Implement IPI stats
config: mips-allnoconfig (https://download.01.org/0day-ci/archive/20240707/202407070524.LKSlICvH-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240707/202407070524.LKSlICvH-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407070524.LKSlICvH-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from arch/mips/kernel/irq.c:29:
>> arch/mips/include/asm/ipi.h:54:6: warning: no previous prototype for 'mips_smp_ipi_set_virq_range' [-Wmissing-prototypes]
54 | void mips_smp_ipi_set_virq_range(int virq, int nr)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/include/asm/ipi.h:58:6: warning: no previous prototype for 'mips_smp_ipi_set_irqdomain' [-Wmissing-prototypes]
58 | void mips_smp_ipi_set_irqdomain(struct irq_domain *d)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/mips_smp_ipi_set_virq_range +54 arch/mips/include/asm/ipi.h
42d789a89e6b90 Jiaxun Yang 2024-07-05 48
42d789a89e6b90 Jiaxun Yang 2024-07-05 49 static inline void mips_smp_show_ipi_stats(struct seq_file *p, int prec)
42d789a89e6b90 Jiaxun Yang 2024-07-05 50 {
42d789a89e6b90 Jiaxun Yang 2024-07-05 51 }
b7a65e07e35cdf Jiaxun Yang 2024-07-05 52 #endif /* CONFIG_GENERIC_IRQ_IPI */
877ae81debcbb0 Jiaxun Yang 2024-07-05 53 #else
877ae81debcbb0 Jiaxun Yang 2024-07-05 @54 void mips_smp_ipi_set_virq_range(int virq, int nr)
877ae81debcbb0 Jiaxun Yang 2024-07-05 55 {
877ae81debcbb0 Jiaxun Yang 2024-07-05 56 }
877ae81debcbb0 Jiaxun Yang 2024-07-05 57
877ae81debcbb0 Jiaxun Yang 2024-07-05 @58 void mips_smp_ipi_set_irqdomain(struct irq_domain *d)
877ae81debcbb0 Jiaxun Yang 2024-07-05 59 {
877ae81debcbb0 Jiaxun Yang 2024-07-05 60 }
877ae81debcbb0 Jiaxun Yang 2024-07-05 61
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Jiaxun,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 0b58e108042b0ed28a71cd7edf5175999955b233]
url: https://github.com/intel-lab-lkp/linux/commits/Jiaxun-Yang/MIPS-smp-Make-IPI-interrupts-scalable/20240706-040839
base: 0b58e108042b0ed28a71cd7edf5175999955b233
patch link: https://lore.kernel.org/r/20240705-b4-mips-ipi-improvements-v2-5-2d50b56268e8%40flygoat.com
patch subject: [PATCH v2 05/10] MIPS: smp: Implement IPI stats
config: mips-rb532_defconfig (https://download.01.org/0day-ci/archive/20240707/202407070535.1mCAxzdO-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project a0c6b8aef853eedaa0980f07c0a502a5a8a9740e)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240707/202407070535.1mCAxzdO-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407070535.1mCAxzdO-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from arch/mips/kernel/irq.c:17:
In file included from include/linux/mm.h:2229:
include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
In file included from arch/mips/kernel/irq.c:29:
>> arch/mips/include/asm/ipi.h:54:6: warning: no previous prototype for function 'mips_smp_ipi_set_virq_range' [-Wmissing-prototypes]
54 | void mips_smp_ipi_set_virq_range(int virq, int nr)
| ^
arch/mips/include/asm/ipi.h:54:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
54 | void mips_smp_ipi_set_virq_range(int virq, int nr)
| ^
| static
>> arch/mips/include/asm/ipi.h:58:6: warning: no previous prototype for function 'mips_smp_ipi_set_irqdomain' [-Wmissing-prototypes]
58 | void mips_smp_ipi_set_irqdomain(struct irq_domain *d)
| ^
arch/mips/include/asm/ipi.h:58:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
58 | void mips_smp_ipi_set_irqdomain(struct irq_domain *d)
| ^
| static
3 warnings generated.
vim +/mips_smp_ipi_set_virq_range +54 arch/mips/include/asm/ipi.h
42d789a89e6b90 Jiaxun Yang 2024-07-05 48
42d789a89e6b90 Jiaxun Yang 2024-07-05 49 static inline void mips_smp_show_ipi_stats(struct seq_file *p, int prec)
42d789a89e6b90 Jiaxun Yang 2024-07-05 50 {
42d789a89e6b90 Jiaxun Yang 2024-07-05 51 }
b7a65e07e35cdf Jiaxun Yang 2024-07-05 52 #endif /* CONFIG_GENERIC_IRQ_IPI */
877ae81debcbb0 Jiaxun Yang 2024-07-05 53 #else
877ae81debcbb0 Jiaxun Yang 2024-07-05 @54 void mips_smp_ipi_set_virq_range(int virq, int nr)
877ae81debcbb0 Jiaxun Yang 2024-07-05 55 {
877ae81debcbb0 Jiaxun Yang 2024-07-05 56 }
877ae81debcbb0 Jiaxun Yang 2024-07-05 57
877ae81debcbb0 Jiaxun Yang 2024-07-05 @58 void mips_smp_ipi_set_irqdomain(struct irq_domain *d)
877ae81debcbb0 Jiaxun Yang 2024-07-05 59 {
877ae81debcbb0 Jiaxun Yang 2024-07-05 60 }
877ae81debcbb0 Jiaxun Yang 2024-07-05 61
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.