show_interrupts() is accidentally modifying the incoming seq_file pointer. It goes oops if seq_printf() returns non-zero. arch/i386/kernel/irq.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff -puN arch/i386/kernel/irq.c~show_interrupts-fixes arch/i386/kernel/irq.c --- 25/arch/i386/kernel/irq.c~show_interrupts-fixes 2003-03-07 20:19:46.000000000 -0800 +++ 25-akpm/arch/i386/kernel/irq.c 2003-03-07 20:19:46.000000000 -0800 @@ -146,7 +146,7 @@ int show_interrupts(struct seq_file *p, seq_printf(p, " "); for (j=0; jtypename); seq_printf(p, " %s", action->name); @@ -176,13 +175,13 @@ skip: seq_printf(p, "NMI: "); for (j = 0; j < NR_CPUS; j++) if (cpu_online(j)) - p += seq_printf(p, "%10u ", nmi_count(j)); + seq_printf(p, "%10u ", nmi_count(j)); seq_putc(p, '\n'); #if CONFIG_X86_LOCAL_APIC seq_printf(p, "LOC: "); for (j = 0; j < NR_CPUS; j++) if (cpu_online(j)) - p += seq_printf(p, "%10u ", irq_stat[j].apic_timer_irqs); + seq_printf(p, "%10u ", irq_stat[j].apic_timer_irqs); seq_putc(p, '\n'); #endif seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); _