mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-18 10:56:14 +00:00
ARM: fix /proc/interrupts formatting
As per x86, align the initial column according to how many IRQs we have. Also, provide an english explaination for the 'LOC:' and 'IPI:' lines. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
cab8c6f305
commit
f13cd4170e
@ -20,7 +20,7 @@ struct seq_file;
|
|||||||
extern unsigned int arch_nr_irqs;
|
extern unsigned int arch_nr_irqs;
|
||||||
extern void (*init_arch_irq)(void);
|
extern void (*init_arch_irq)(void);
|
||||||
extern void init_FIQ(void);
|
extern void init_FIQ(void);
|
||||||
extern int show_fiq_list(struct seq_file *, void *);
|
extern int show_fiq_list(struct seq_file *, int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is for easy migration, but should be changed in the source
|
* This is for easy migration, but should be changed in the source
|
||||||
|
@ -33,7 +33,7 @@ struct seq_file;
|
|||||||
/*
|
/*
|
||||||
* generate IPI list text
|
* generate IPI list text
|
||||||
*/
|
*/
|
||||||
extern void show_ipi_list(struct seq_file *p);
|
extern void show_ipi_list(struct seq_file *, int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from assembly code, this handles an IPI.
|
* Called from assembly code, this handles an IPI.
|
||||||
@ -97,6 +97,6 @@ extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
|
|||||||
/*
|
/*
|
||||||
* show local interrupt info
|
* show local interrupt info
|
||||||
*/
|
*/
|
||||||
extern void show_local_irqs(struct seq_file *);
|
extern void show_local_irqs(struct seq_file *, int);
|
||||||
|
|
||||||
#endif /* ifndef __ASM_ARM_SMP_H */
|
#endif /* ifndef __ASM_ARM_SMP_H */
|
||||||
|
@ -67,10 +67,11 @@ static struct fiq_handler default_owner = {
|
|||||||
|
|
||||||
static struct fiq_handler *current_fiq = &default_owner;
|
static struct fiq_handler *current_fiq = &default_owner;
|
||||||
|
|
||||||
int show_fiq_list(struct seq_file *p, void *v)
|
int show_fiq_list(struct seq_file *p, int prec)
|
||||||
{
|
{
|
||||||
if (current_fiq != &default_owner)
|
if (current_fiq != &default_owner)
|
||||||
seq_printf(p, "FIQ: %s\n", current_fiq->name);
|
seq_printf(p, "%*s: %s\n", prec, "FIQ",
|
||||||
|
current_fiq->name);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -57,11 +57,15 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
struct irqaction * action;
|
struct irqaction * action;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
int prec, n;
|
||||||
|
|
||||||
|
for (prec = 3, n = 1000; prec < 10 && n <= nr_irqs; prec++)
|
||||||
|
n *= 10;
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
char cpuname[12];
|
char cpuname[12];
|
||||||
|
|
||||||
seq_printf(p, " ");
|
seq_printf(p, "%*s ", prec, "");
|
||||||
for_each_present_cpu(cpu) {
|
for_each_present_cpu(cpu) {
|
||||||
sprintf(cpuname, "CPU%d", cpu);
|
sprintf(cpuname, "CPU%d", cpu);
|
||||||
seq_printf(p, " %10s", cpuname);
|
seq_printf(p, " %10s", cpuname);
|
||||||
@ -76,7 +80,7 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||||||
if (!action)
|
if (!action)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
seq_printf(p, "%3d: ", i);
|
seq_printf(p, "%*d: ", prec, i);
|
||||||
for_each_present_cpu(cpu)
|
for_each_present_cpu(cpu)
|
||||||
seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
|
seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
|
||||||
seq_printf(p, " %10s", desc->chip->name ? : "-");
|
seq_printf(p, " %10s", desc->chip->name ? : "-");
|
||||||
@ -89,15 +93,15 @@ unlock:
|
|||||||
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
} else if (i == nr_irqs) {
|
} else if (i == nr_irqs) {
|
||||||
#ifdef CONFIG_FIQ
|
#ifdef CONFIG_FIQ
|
||||||
show_fiq_list(p, v);
|
show_fiq_list(p, prec);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
show_ipi_list(p);
|
show_ipi_list(p, prec);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
#ifdef CONFIG_LOCAL_TIMERS
|
||||||
show_local_irqs(p);
|
show_local_irqs(p, prec);
|
||||||
#endif
|
#endif
|
||||||
seq_printf(p, "Err: %10lu\n", irq_err_count);
|
seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -382,16 +382,16 @@ void arch_send_call_function_single_ipi(int cpu)
|
|||||||
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
|
smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_ipi_list(struct seq_file *p)
|
void show_ipi_list(struct seq_file *p, int prec)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
|
||||||
seq_puts(p, "IPI:");
|
seq_printf(p, "%*s: ", prec, "IPI");
|
||||||
|
|
||||||
for_each_present_cpu(cpu)
|
for_each_present_cpu(cpu)
|
||||||
seq_printf(p, "%10u ", __get_irq_stat(cpu, ipi_irqs));
|
seq_printf(p, "%10u ", __get_irq_stat(cpu, ipi_irqs));
|
||||||
|
|
||||||
seq_putc(p, '\n');
|
seq_printf(p, " Inter-processor interrupts\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -421,16 +421,16 @@ asmlinkage void __exception do_local_timer(struct pt_regs *regs)
|
|||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_local_irqs(struct seq_file *p)
|
void show_local_irqs(struct seq_file *p, int prec)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
|
||||||
seq_printf(p, "LOC: ");
|
seq_printf(p, "%*s: ", prec, "LOC");
|
||||||
|
|
||||||
for_each_present_cpu(cpu)
|
for_each_present_cpu(cpu)
|
||||||
seq_printf(p, "%10u ", __get_irq_stat(cpu, local_timer_irqs));
|
seq_printf(p, "%10u ", __get_irq_stat(cpu, local_timer_irqs));
|
||||||
|
|
||||||
seq_putc(p, '\n');
|
seq_printf(p, " Local timer interrupts\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user