mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
genirq/proc: Increase default interrupt number precision to four
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
This commit is contained in:
parent
2d62735f1d
commit
34594da765
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user