]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
genirq/proc: Increase default interrupt number precision to four
authorThomas Gleixner <tglx@kernel.org>
Sun, 17 May 2026 20:02:29 +0000 (22:02 +0200)
committerThomas Gleixner <tglx@kernel.org>
Tue, 26 May 2026 14:21:14 +0000 (16:21 +0200)
Quite some architectures have four character wide acronyms for architecture
specific interrupts like IPI, NMI, etc.

The default precision of printing the Linux device interrupt numbers is
three, which causes quite some code to play games with adding or omitting
space after the acronym and the colon in order to keep the per CPU numbers
properly aligned.

Increase the default number precision to four in the core code and get rid
of the space games all over the place. At the same time align all
architecture specific descriptor texts left so that they show up in the
same column as the interrupt chip names, which makes the output more
uniform accross architectures. Fix up the GDB script to this new scheme as
well.

Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260517194931.839482411@kernel.org
12 files changed:
arch/alpha/kernel/irq.c
arch/arm/kernel/smp.c
arch/arm64/kernel/smp.c
arch/loongarch/kernel/smp.c
arch/riscv/kernel/smp.c
arch/sh/kernel/irq.c
arch/sparc/kernel/irq_32.c
arch/sparc/kernel/irq_64.c
arch/um/kernel/irq.c
arch/xtensa/kernel/irq.c
kernel/irq/proc.c
scripts/gdb/linux/interrupts.py

index c67047c5d83045032346fa60f7ca371e2713cd67..4a6a8b1d5a8b1bae49021dbb9473116ed09cd23d 100644 (file)
@@ -72,16 +72,16 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        int j;
 
 #ifdef CONFIG_SMP
-       seq_puts(p, "IPI: ");
+       seq_puts(p, " IPI: ");
        for_each_online_cpu(j)
                seq_printf(p, "%10lu ", cpu_data[j].ipi_count);
        seq_putc(p, '\n');
 #endif
-       seq_puts(p, "PMI: ");
+       seq_puts(p, " PMI: ");
        for_each_online_cpu(j)
                seq_printf(p, "%10lu ", per_cpu(irq_pmi_count, j));
-       seq_puts(p, "          Performance Monitoring\n");
-       seq_printf(p, "ERR: %10lu\n", irq_err_count);
+       seq_puts(p, " Performance Monitoring\n");
+       seq_printf(p, " ERR: %10lu\n", irq_err_count);
        return 0;
 }
 
index 4e8e89a26ca3228161c3bc1aa614795d2e1664a3..b5fb4697bc3f8d236e99909e7bca5f9e0de5e49e 100644 (file)
@@ -551,8 +551,7 @@ void show_ipi_list(struct seq_file *p, int prec)
                if (!ipi_desc[i])
                        continue;
 
-               seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
-                          prec >= 4 ? " " : "");
+               seq_printf(p, "%*s%u:", prec - 1, "IPI", i);
 
                for_each_online_cpu(cpu)
                        seq_printf(p, "%10u ", irq_desc_kstat_cpu(ipi_desc[i], cpu));
index 1aa324104afb440951e0b5da1bd9d6ad84aa2f72..1d0e0e6a5b9264156170bfb741aecdefce484374 100644 (file)
@@ -833,11 +833,10 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        unsigned int cpu, i;
 
        for (i = 0; i < MAX_IPI; i++) {
-               seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
-                          prec >= 4 ? " " : "");
+               seq_printf(p, "%*s%u: ", prec - 1, "IPI", i);
                for_each_online_cpu(cpu)
                        seq_printf(p, "%10u ", irq_desc_kstat_cpu(get_ipi_desc(cpu, i), cpu));
-               seq_printf(p, "      %s\n", ipi_types[i]);
+               seq_printf(p, " %s\n", ipi_types[i]);
        }
 
        seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count);
index 64a048f1b88033ef5b01060852b4933727bce854..50922610758ba129f3039b786d755b9fbe293fcb 100644 (file)
@@ -88,7 +88,7 @@ void show_ipi_list(struct seq_file *p, int prec)
        unsigned int cpu, i;
 
        for (i = 0; i < NR_IPI; i++) {
-               seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i, prec >= 4 ? " " : "");
+               seq_printf(p, "%*s%u:", prec - 1, "IPI", i);
                for_each_online_cpu(cpu)
                        seq_put_decimal_ull_width(p, " ", per_cpu(irq_stat, cpu).ipi_irqs[i], 10);
                seq_printf(p, " LoongArch  %d  %s\n", i + 1, ipi_types[i]);
index 5ed5095320e66ab8f9e528aecbdcb7520ec89cb3..fa66f9c97d748d4a286c84d958130ed0d2d918d8 100644 (file)
@@ -226,8 +226,7 @@ void 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 ? " " : "");
+               seq_printf(p, "%*s%u:", prec - 1, "IPI", i);
                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]);
index 9022d8af9d686d24914808d0799bffa0b22be8e8..03c39b5da50fba910c30fc61b4a48762aaba237e 100644 (file)
@@ -46,7 +46,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        seq_printf(p, "%*s:", prec, "NMI");
        for_each_online_cpu(j)
                seq_put_decimal_ull_width(p, " ", per_cpu(irq_stat.__nmi_count, j), 10);
-       seq_printf(p, "  Non-maskable interrupts\n");
+       seq_printf(p, " Non-maskable interrupts\n");
 
        seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count));
 
index 5210991429d5ed36c7225712cecb79a307634314..22db727652ba2475329d9aae2d763da8ec08bb29 100644 (file)
@@ -199,19 +199,19 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        int j;
 
 #ifdef CONFIG_SMP
-       seq_printf(p, "RES:");
+       seq_printf(p, "%*s:", prec, "RES");
        for_each_online_cpu(j)
                seq_put_decimal_ull_width(p, " ", cpu_data(j).irq_resched_count, 10);
-       seq_printf(p, "     IPI rescheduling interrupts\n");
-       seq_printf(p, "CAL:");
+       seq_printf(p, " IPI rescheduling interrupts\n");
+       seq_printf(p, "%*s:", prec, "CAL");
        for_each_online_cpu(j)
                seq_put_decimal_ull_width(p, " ", cpu_data(j).irq_call_count, 10);
-       seq_printf(p, "     IPI function call interrupts\n");
+       seq_printf(p, " IPI function call interrupts\n");
 #endif
-       seq_printf(p, "NMI:");
+       seq_printf(p, "%*s:", prec, "NMI");
        for_each_online_cpu(j)
                seq_put_decimal_ull_width(p, " ", cpu_data(j).counter, 10);
-       seq_printf(p, "     Non-maskable interrupts\n");
+       seq_printf(p, " Non-maskable interrupts\n");
        return 0;
 }
 
index c5466a9fd56088508a354141b252808709b66b4c..3f55c69d5f3bc9e5b9de1d7228fef626c8097392 100644 (file)
@@ -303,10 +303,10 @@ int arch_show_interrupts(struct seq_file *p, int prec)
 {
        int j;
 
-       seq_printf(p, "NMI:");
+       seq_printf(p, "%*s:", prec, "NMI");
        for_each_online_cpu(j)
                seq_put_decimal_ull_width(p, " ", cpu_data(j).__nmi_count, 10);
-       seq_printf(p, "     Non-maskable interrupts\n");
+       seq_printf(p, " Non-maskable interrupts\n");
        return 0;
 }
 
index 5929d498b65fae23cc0162c2d7db17f82e98ef1c..ddfd6e9bd8c7797f4ef67261f70caa5c673b6eb9 100644 (file)
@@ -716,12 +716,12 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        seq_printf(p, "%*s: ", prec, "RES");
        for_each_online_cpu(cpu)
                seq_printf(p, "%10u ", irq_stats(cpu)->irq_resched_count);
-       seq_puts(p, "  Rescheduling interrupts\n");
+       seq_puts(p, " Rescheduling interrupts\n");
 
        seq_printf(p, "%*s: ", prec, "CAL");
        for_each_online_cpu(cpu)
                seq_printf(p, "%10u ", irq_stats(cpu)->irq_call_count);
-       seq_puts(p, "  Function call interrupts\n");
+       seq_puts(p, " Function call interrupts\n");
 #endif
 
        return 0;
index b1e410f6b5ab8e043759b66693f86eae90b668fd..6f01f530868b057124e0aa745595cc5a7e61368a 100644 (file)
@@ -59,7 +59,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
        seq_printf(p, "%*s:", prec, "NMI");
        for_each_online_cpu(cpu)
                seq_printf(p, " %10lu", per_cpu(nmi_count, cpu));
-       seq_puts(p, "   Non-maskable interrupts\n");
+       seq_puts(p, " Non-maskable interrupts\n");
 #endif
        return 0;
 }
index c635fb62c7837e4550541e3882835b4eca978463..1cb47a8eab4989e5fbcba796ce478658086764b5 100644 (file)
@@ -460,7 +460,7 @@ int __weak arch_show_interrupts(struct seq_file *p, int prec)
 static struct irq_proc_constraints {
        unsigned int    num_prec;
 } irq_proc_constraints __read_mostly = {
-       .num_prec       = 3,
+       .num_prec       = 4,
 };
 
 #ifndef ACTUAL_NR_IRQS
@@ -471,7 +471,7 @@ void irq_proc_calc_prec(void)
 {
        unsigned int prec, n;
 
-       for (prec = 3, n = 1000; prec < 10 && n <= total_nr_irqs; ++prec)
+       for (prec = 4, n = 10000; prec < 10 && n <= total_nr_irqs; ++prec)
                n *= 10;
        WRITE_ONCE(irq_proc_constraints.num_prec, prec);
 }
index a4e25d2bf123e8554fb483b0243930bdef3f09bd..e96734348f86078d0789487480236003f4ac013e 100644 (file)
@@ -131,23 +131,19 @@ def arm_common_show_interrupts(prec):
     if nr_ipi is None or ipi_desc is None or ipi_types is None:
         return text
 
-    if prec >= 4:
-        sep = " "
-    else:
-        sep = ""
-
     for ipi in range(nr_ipi):
-        text += "%*s%u:%s" % (prec - 1, "IPI", ipi, sep)
+        text += "%*s%u: " % (prec - 1, "IPI", ipi)
         desc = ipi_desc[ipi].cast(irq_desc_type.get_type().pointer())
         if desc == 0:
             continue
         for cpu in cpus.each_online_cpu():
-            text += "%10u" % (cpus.per_cpu(desc['kstat_irqs'], cpu)['cnt'])
-        text += "      %s" % (ipi_types[ipi].string())
+            text += "%10u " % (cpus.per_cpu(desc['kstat_irqs'], cpu)['cnt'])
+        text += "%s" % (ipi_types[ipi].string())
         text += "\n"
     return text
 
 def aarch64_show_interrupts(prec):
+    # Does not work for ARM64 as "ipi_desc" is not available there
     text = arm_common_show_interrupts(prec)
     text += "%*s: %10lu\n" % (prec, "ERR", gdb.parse_and_eval("irq_err_count"))
     return text
@@ -175,8 +171,8 @@ class LxInterruptList(gdb.Command):
 
     def invoke(self, arg, from_tty):
         nr_irqs = gdb.parse_and_eval("total_nr_irqs")
-        prec = 3
-        j = 1000
+        prec = 4
+        j = 10000
         while prec < 10 and j <= nr_irqs:
             prec += 1
             j *= 10