[CFT][PATCH] /proc/interrupts fixes

Alexander Viro (viro@math.psu.edu)
Thu, 22 Nov 2001 18:36:44 -0500 (EST)


Patch below switches /proc/interrupts to seq_file. Due to the
ugly (and heavily platform-dependent) layout there's not much of "seq"
here - we simply use the buffering and overflow-prevention provided by
seq_file.

Patch works on x86 and should work on every architecture where
it manages to build. Hopefully - all of them. IOW, I've done the
conversion for all architectures, but there could be typos. Patch
is very straightforward - see yourself.

Folks, please check if it compiles (and works). IMO it's
worth applying; the question being, at which point... Linus?

diff -urN S15-pre9/arch/alpha/kernel/irq.c S15-pre9-current/arch/alpha/kernel/irq.c
--- S15-pre9/arch/alpha/kernel/irq.c Sun Sep 23 16:11:55 2001
+++ S15-pre9-current/arch/alpha/kernel/irq.c Thu Nov 22 13:59:41 2001
@@ -23,6 +23,7 @@
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/proc_fs.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/io.h>
@@ -514,64 +515,63 @@
}

int
-get_irq_list(char *buf)
+show_interrupts(struct seq_file *p, void *v)
{
#ifdef CONFIG_SMP
int j;
#endif
int i;
struct irqaction * action;
- char *p = buf;

#ifdef CONFIG_SMP
- p += sprintf(p, " ");
+ seq_puts(p, " ");
for (i = 0; i < smp_num_cpus; i++)
- p += sprintf(p, "CPU%d ", i);
+ seq_printf(p, "CPU%d ", i);
#ifdef DO_BROADCAST_INTS
for (i = 0; i < smp_num_cpus; i++)
- p += sprintf(p, "TRY%d ", i);
+ seq_printf(p, "TRY%d ", i);
#endif
- *p++ = '\n';
+ seq_putc(p, '\n');
#endif

for (i = 0; i < NR_IRQS; i++) {
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: ",i);
+ seq_printf(p, "%3d: ",i);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#ifdef DO_BROADCAST_INTS
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10lu ",
+ seq_printf(p, "%10lu ",
irq_attempt(cpu_logical_map(j), i));
#endif
#endif
- p += sprintf(p, " %14s", irq_desc[i].handler->typename);
- p += sprintf(p, " %c%s",
+ seq_printf(p, " %14s", irq_desc[i].handler->typename);
+ seq_printf(p, " %c%s",
(action->flags & SA_INTERRUPT)?'+':' ',
action->name);

for (action=action->next; action; action = action->next) {
- p += sprintf(p, ", %c%s",
+ seq_printf(p, ", %c%s",
(action->flags & SA_INTERRUPT)?'+':' ',
action->name);
}
- *p++ = '\n';
+ seq_putc(p, '\n');
}
#if CONFIG_SMP
- p += sprintf(p, "IPI: ");
+ seq_puts(p, "IPI: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10lu ",
+ seq_printf(p, "%10lu ",
cpu_data[cpu_logical_map(j)].ipi_count);
- p += sprintf(p, "\n");
+ seq_putc(p, '\n');
#endif
- p += sprintf(p, "ERR: %10lu\n", irq_err_count);
- return p - buf;
+ seq_printf(p, "ERR: %10lu\n", irq_err_count);
+ return 0;
}


diff -urN S15-pre9/arch/arm/kernel/fiq.c S15-pre9-current/arch/arm/kernel/fiq.c
--- S15-pre9/arch/arm/kernel/fiq.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/arm/kernel/fiq.c Thu Nov 22 14:00:03 2001
@@ -40,6 +40,7 @@
#include <linux/mm.h>
#include <linux/mman.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/fiq.h>
#include <asm/io.h>
@@ -92,15 +93,12 @@

static struct fiq_handler *current_fiq = &default_owner;

-int get_fiq_list(char *buf)
+int show_fiq_list(struct seq_file *p, void *v)
{
- char *p = buf;
-
if (current_fiq != &default_owner)
- p += sprintf(p, "FIQ: %s\n",
- current_fiq->name);
+ seq_printf(p, "FIQ: %s\n", current_fiq->name);

- return p - buf;
+ return 0;
}

void set_fiq_handler(void *start, unsigned int length)
diff -urN S15-pre9/arch/arm/kernel/irq.c S15-pre9-current/arch/arm/kernel/irq.c
--- S15-pre9/arch/arm/kernel/irq.c Sun Jul 29 01:54:41 2001
+++ S15-pre9-current/arch/arm/kernel/irq.c Thu Nov 22 14:00:17 2001
@@ -28,6 +28,7 @@
#include <linux/random.h>
#include <linux/smp.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/system.h>
@@ -95,29 +96,28 @@
spin_unlock_irqrestore(&irq_controller_lock, flags);
}

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i;
struct irqaction * action;
- char *p = buf;

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: %10u ", i, kstat_irqs(i));
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, "%3d: %10u ", i, kstat_irqs(i));
+ seq_printf(p, " %s", action->name);
for (action = action->next; action; action = action->next) {
- p += sprintf(p, ", %s", action->name);
+ seq_printf(p, ", %s", action->name);
}
- *p++ = '\n';
+ seq_putc(p, '\n');
}

#ifdef CONFIG_ARCH_ACORN
- p += get_fiq_list(p);
+ show_fiq_list(p);
#endif
- p += sprintf(p, "Err: %10lu\n", irq_err_count);
- return p - buf;
+ seq_printf(p, "Err: %10lu\n", irq_err_count);
+ return 0;
}

/*
diff -urN S15-pre9/arch/cris/kernel/irq.c S15-pre9-current/arch/cris/kernel/irq.c
--- S15-pre9/arch/cris/kernel/irq.c Sat Aug 11 14:59:20 2001
+++ S15-pre9-current/arch/cris/kernel/irq.c Thu Nov 22 14:00:28 2001
@@ -33,6 +33,7 @@
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/io.h>
@@ -223,27 +224,27 @@
NULL, NULL, NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction * action;

for (i = 0; i < NR_IRQS; i++) {
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %10u %c %s",
+ seq_printf(p, "%2d: %10u %c %s",
i, kstat.irqs[0][i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action = action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

/* called by the assembler IRQ entry functions defined in irq.h
diff -urN S15-pre9/arch/i386/kernel/irq.c S15-pre9-current/arch/i386/kernel/irq.c
--- S15-pre9/arch/i386/kernel/irq.c Tue Nov 6 11:36:30 2001
+++ S15-pre9-current/arch/i386/kernel/irq.c Thu Nov 22 10:40:44 2001
@@ -32,6 +32,7 @@
#include <linux/kernel_stat.h>
#include <linux/irq.h>
#include <linux/proc_fs.h>
+#include <linux/seq_file.h>

#include <asm/atomic.h>
#include <asm/io.h>
@@ -131,57 +132,53 @@
* Generic, controller-independent functions:
*/

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i, j;
struct irqaction * action;
- char *p = buf;

- p += sprintf(p, " ");
+ seq_printf(p, " ");
for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
- *p++ = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: ",i);
+ seq_printf(p, "%3d: ",i);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- p += sprintf(p, " %14s", irq_desc[i].handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, " %14s", irq_desc[i].handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
- p += sprintf(p, ", %s", action->name);
- *p++ = '\n';
+ seq_printf(p, ", %s", action->name);
+ seq_putc(p, '\n');
}
- p += sprintf(p, "NMI: ");
+ seq_printf(p, "NMI: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
- nmi_count(cpu_logical_map(j)));
- p += sprintf(p, "\n");
+ seq_printf(p, "%10u ", nmi_count(cpu_logical_map(j)));
+ seq_putc(p, '\n');
#if CONFIG_X86_LOCAL_APIC
- p += sprintf(p, "LOC: ");
+ seq_printf(p, "LOC: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
- apic_timer_irqs[cpu_logical_map(j)]);
- p += sprintf(p, "\n");
+ seq_printf(p, "%10u ", apic_timer_irqs[cpu_logical_map(j)]);
+ seq_putc(p, '\n');
#endif
- p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
+ seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
#ifdef CONFIG_X86_IO_APIC
#ifdef APIC_MISMATCH_DEBUG
- p += sprintf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
+ seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
#endif
#endif
- return p - buf;
+ return 0;
}
-

/*
* Global interrupt locks for SMP. Allow interrupts to come in on any
diff -urN S15-pre9/arch/ia64/kernel/irq.c S15-pre9-current/arch/ia64/kernel/irq.c
--- S15-pre9/arch/ia64/kernel/irq.c Thu Nov 22 03:56:13 2001
+++ S15-pre9-current/arch/ia64/kernel/irq.c Thu Nov 22 14:00:50 2001
@@ -32,6 +32,7 @@
#include <linux/kernel_stat.h>
#include <linux/irq.h>
#include <linux/proc_fs.h>
+#include <linux/seq_file.h>

#include <asm/atomic.h>
#include <asm/io.h>
@@ -131,55 +132,54 @@
* Generic, controller-independent functions:
*/

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i, j;
struct irqaction * action;
irq_desc_t *idesc;
- char *p = buf;

- p += sprintf(p, " ");
+ seq_puts(p, " ");
for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
- *p++ = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++) {
idesc = irq_desc(i);
action = idesc->action;
if (!action)
continue;
- p += sprintf(p, "%3d: ",i);
+ seq_printf(p, "%3d: ",i);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- p += sprintf(p, " %14s", idesc->handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, " %14s", idesc->handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
- p += sprintf(p, ", %s", action->name);
- *p++ = '\n';
+ seq_printf(p, ", %s", action->name);
+ seq_putc('\n');
}
- p += sprintf(p, "NMI: ");
+ seq_puts(p, "NMI: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
nmi_count(cpu_logical_map(j)));
- p += sprintf(p, "\n");
+ seq_putc(p, '\n');
#if defined(CONFIG_SMP) && defined(CONFIG_X86)
- p += sprintf(p, "LOC: ");
+ seq_puts(p, "LOC: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
apic_timer_irqs[cpu_logical_map(j)]);
- p += sprintf(p, "\n");
+ seq_putc(p, '\n');
#endif
- p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
+ seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
#if defined(CONFIG_X86) && defined(CONFIG_X86_IO_APIC) && defined(APIC_MISMATCH_DEBUG)
- p += sprintf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
+ seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
#endif
- return p - buf;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/amiga/amiints.c S15-pre9-current/arch/m68k/amiga/amiints.c
--- S15-pre9/arch/m68k/amiga/amiints.c Fri Feb 16 20:28:32 2001
+++ S15-pre9-current/arch/m68k/amiga/amiints.c Thu Nov 22 14:11:00 2001
@@ -40,6 +40,7 @@
#include <linux/sched.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/irq.h>
@@ -53,7 +54,7 @@
unsigned long flags, const char *devname, void *dev_id);
extern void cia_free_irq(struct ciabase *base, unsigned int irq, void *dev_id);
extern void cia_init_IRQ(struct ciabase *base);
-extern int cia_get_irq_list(struct ciabase *base, char *buf);
+extern int cia_get_irq_list(struct ciabase *base, struct seq_file *p);

/* irq node variables for amiga interrupt sources */
static irq_node_t *ami_irq_list[AMI_STD_IRQS];
@@ -468,28 +469,28 @@
ami_int4, ami_int5, ami_badint, ami_int7
};

-int amiga_get_irq_list(char *buf)
+int show_amiga_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
irq_node_t *node;

for (i = 0; i < AMI_STD_IRQS; i++) {
if (!(node = ami_irq_list[i]))
continue;
- len += sprintf(buf+len, "ami %2d: %10u ", i,
+ seq_printf(p, "ami %2d: %10u ", i,
kstat.irqs[0][SYS_IRQS + i]);
do {
if (node->flags & SA_INTERRUPT)
- len += sprintf(buf+len, "F ");
+ seq_puts(p, "F ");
else
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", node->devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", node->devname);
if ((node = node->next))
- len += sprintf(buf+len, " ");
+ seq_puts(p, " ");
} while (node);
}

- len += cia_get_irq_list(&ciaa_base, buf+len);
- len += cia_get_irq_list(&ciab_base, buf+len);
- return len;
+ cia_get_irq_list(&ciaa_base, p);
+ cia_get_irq_list(&ciab_base, p);
+ return 0;
}
diff -urN S15-pre9/arch/m68k/amiga/cia.c S15-pre9-current/arch/m68k/amiga/cia.c
--- S15-pre9/arch/m68k/amiga/cia.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/amiga/cia.c Thu Nov 22 14:11:09 2001
@@ -16,6 +16,7 @@
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/amigahw.h>
@@ -158,16 +159,16 @@
custom.intena = IF_SETCLR | base->int_mask;
}

-int cia_get_irq_list(struct ciabase *base, char *buf)
+int cia_get_irq_list(struct ciabase *base, struct seq_file *p)
{
- int i, j, len = 0;
+ int i, j;

j = base->cia_irq;
for (i = 0; i < CIA_IRQS; i++) {
- len += sprintf(buf+len, "cia %2d: %10d ", j + i,
+ seq_printf(p, "cia %2d: %10d ", j + i,
kstat.irqs[0][SYS_IRQS + j + i]);
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", base->irq_list[i].devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", base->irq_list[i].devname);
}
- return len;
+ return 0;
}
diff -urN S15-pre9/arch/m68k/amiga/config.c S15-pre9-current/arch/m68k/amiga/config.c
--- S15-pre9/arch/m68k/amiga/config.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/m68k/amiga/config.c Thu Nov 22 11:39:29 2001
@@ -86,7 +86,7 @@
extern void amiga_disable_irq (unsigned int);
static void amiga_get_model(char *model);
static int amiga_get_hardware_list(char *buffer);
-extern int amiga_get_irq_list (char *);
+extern int show_amiga_interrupts (struct seq_file *, void *);
/* amiga specific timer functions */
static unsigned long amiga_gettimeoffset (void);
static void a3000_gettod (int *, int *, int *, int *, int *, int *);
@@ -403,7 +403,7 @@
disable_irq = amiga_disable_irq;
mach_get_model = amiga_get_model;
mach_get_hardware_list = amiga_get_hardware_list;
- mach_get_irq_list = amiga_get_irq_list;
+ mach_get_irq_list = show_amiga_interrupts;
mach_gettimeoffset = amiga_gettimeoffset;
if (AMIGAHW_PRESENT(A3000_CLK)){
mach_gettod = a3000_gettod;
diff -urN S15-pre9/arch/m68k/apollo/config.c S15-pre9-current/arch/m68k/apollo/config.c
--- S15-pre9/arch/m68k/apollo/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/apollo/config.c Thu Nov 22 12:26:43 2001
@@ -31,7 +31,7 @@
extern void dn_free_irq(unsigned int irq, void *dev_id);
extern void dn_enable_irq(unsigned int);
extern void dn_disable_irq(unsigned int);
-extern int dn_get_irq_list(char *);
+extern int show_dn_interrupts(struct seq_file *, void *);
extern unsigned long dn_gettimeoffset(void);
extern void dn_gettod(int *, int *, int *, int *, int *, int *);
extern int dn_dummy_hwclk(int, struct hwclk_time *);
@@ -173,7 +173,7 @@
mach_free_irq = dn_free_irq;
enable_irq = dn_enable_irq;
disable_irq = dn_disable_irq;
- mach_get_irq_list = dn_get_irq_list;
+ mach_get_irq_list = show_dn_interrupts;
mach_gettimeoffset = dn_gettimeoffset;
mach_gettod = dn_gettod; /* */
mach_max_dma_address = 0xffffffff;
diff -urN S15-pre9/arch/m68k/apollo/dn_ints.c S15-pre9-current/arch/m68k/apollo/dn_ints.c
--- S15-pre9/arch/m68k/apollo/dn_ints.c Tue Mar 13 00:34:06 2001
+++ S15-pre9-current/arch/m68k/apollo/dn_ints.c Thu Nov 22 12:27:07 2001
@@ -104,7 +104,7 @@

}

-int dn_get_irq_list(char *buf) {
+int show_dn_interrupts(struct seq_file *p, void *v) {

printk("dn get irq list\n");

diff -urN S15-pre9/arch/m68k/atari/ataints.c S15-pre9-current/arch/m68k/atari/ataints.c
--- S15-pre9/arch/m68k/atari/ataints.c Fri Feb 16 16:48:09 2001
+++ S15-pre9-current/arch/m68k/atari/ataints.c Thu Nov 22 14:11:21 2001
@@ -40,6 +40,7 @@
#include <linux/ptrace.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/traps.h>
@@ -609,37 +610,37 @@
}


-int atari_get_irq_list(char *buf)
+int show_atari_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

for (i = 0; i < NUM_INT_SOURCES; ++i) {
if (vectors[IRQ_SOURCE_TO_VECTOR(i)] == bad_interrupt)
continue;
if (i < STMFP_SOURCE_BASE)
- len += sprintf(buf+len, "auto %2d: %10u ",
+ seq_printf(p,, "auto %2d: %10u ",
i, kstat.irqs[0][i]);
else
- len += sprintf(buf+len, "vec $%02x: %10u ",
+ seq_printf(p,, "vec $%02x: %10u ",
IRQ_SOURCE_TO_VECTOR(i),
kstat.irqs[0][i]);

if (irq_handler[i].handler != atari_call_irq_list) {
- len += sprintf(buf+len, "%s\n", irq_param[i].devname);
+ seq_printf(p,, "%s\n", irq_param[i].devname);
}
else {
irq_node_t *p;
for( p = (irq_node_t *)irq_handler[i].dev_id; p; p = p->next ) {
- len += sprintf(buf+len, "%s\n", p->devname);
+ seq_printf(p,, "%s\n", p->devname);
if (p->next)
- len += sprintf( buf+len, " " );
+ seq_puts(p,, " " );
}
}
}
if (num_spurious)
- len += sprintf(buf+len, "spurio.: %10u\n", num_spurious);
+ seq_printf(p, "spurio.: %10u\n", num_spurious);

- return len;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/atari/config.c S15-pre9-current/arch/m68k/atari/config.c
--- S15-pre9/arch/m68k/atari/config.c Fri Feb 16 20:28:32 2001
+++ S15-pre9-current/arch/m68k/atari/config.c Thu Nov 22 12:15:26 2001
@@ -70,7 +70,7 @@
extern void atari_free_irq (unsigned int irq, void *dev_id);
extern void atari_enable_irq (unsigned int);
extern void atari_disable_irq (unsigned int);
-extern int atari_get_irq_list (char *buf);
+extern int show_atari_interrupts (struct seq_file *, void *);
extern void atari_mksound( unsigned int count, unsigned int ticks );
#ifdef CONFIG_HEARTBEAT
static void atari_heartbeat( int on );
@@ -265,7 +265,7 @@
disable_irq = atari_disable_irq;
mach_get_model = atari_get_model;
mach_get_hardware_list = atari_get_hardware_list;
- mach_get_irq_list = atari_get_irq_list;
+ mach_get_irq_list = show_atari_interrupts;
mach_gettimeoffset = atari_gettimeoffset;
mach_reset = atari_reset;
#ifdef CONFIG_ATARI_FLOPPY
diff -urN S15-pre9/arch/m68k/bvme6000/bvmeints.c S15-pre9-current/arch/m68k/bvme6000/bvmeints.c
--- S15-pre9/arch/m68k/bvme6000/bvmeints.c Thu Feb 15 23:15:53 2001
+++ S15-pre9-current/arch/m68k/bvme6000/bvmeints.c Thu Nov 22 14:11:32 2001
@@ -14,6 +14,7 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/errno.h>
+#include <linux/seq_file.h>

#include <asm/ptrace.h>
#include <asm/system.h>
@@ -127,17 +128,17 @@
}
}

-int bvme6000_get_irq_list (char *buf)
+int show_bvme6000_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

for (i = 0; i < 256; i++) {
if (irq_tab[i].count)
- len += sprintf (buf+len, "Vec 0x%02x: %8d %s\n",
+ seq_printf(p, "Vec 0x%02x: %8d %s\n",
i, irq_tab[i].count,
irq_tab[i].devname ? irq_tab[i].devname : "free");
}
- return len;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/bvme6000/config.c S15-pre9-current/arch/m68k/bvme6000/config.c
--- S15-pre9/arch/m68k/bvme6000/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/bvme6000/config.c Thu Nov 22 12:14:02 2001
@@ -36,7 +36,7 @@
extern void bvme6000_process_int (int level, struct pt_regs *regs);
extern void bvme6000_init_IRQ (void);
extern void bvme6000_free_irq (unsigned int, void *);
-extern int bvme6000_get_irq_list (char *);
+extern int show_bvme6000_interrupts(struct seq_file *, void *);
extern void bvme6000_enable_irq (unsigned int);
extern void bvme6000_disable_irq (unsigned int);
static void bvme6000_get_model(char *model);
@@ -145,7 +145,7 @@
mach_reset = bvme6000_reset;
mach_free_irq = bvme6000_free_irq;
mach_process_int = bvme6000_process_int;
- mach_get_irq_list = bvme6000_get_irq_list;
+ mach_get_irq_list = show_bvme6000_interrupts;
mach_request_irq = bvme6000_request_irq;
enable_irq = bvme6000_enable_irq;
disable_irq = bvme6000_disable_irq;
diff -urN S15-pre9/arch/m68k/hp300/config.c S15-pre9-current/arch/m68k/hp300/config.c
--- S15-pre9/arch/m68k/hp300/config.c Fri Feb 16 01:52:42 2001
+++ S15-pre9-current/arch/m68k/hp300/config.c Thu Nov 22 12:10:50 2001
@@ -25,7 +25,7 @@

extern void hp300_reset(void);
extern void (*hp300_default_handler[])(int, void *, struct pt_regs *);
-extern int hp300_get_irq_list(char *buf);
+extern int show_hp300_interrupts(struct seq_file *, void *);

#ifdef CONFIG_VT
extern int hp300_keyb_init(void);
@@ -70,7 +70,7 @@
mach_request_irq = hp300_request_irq;
mach_free_irq = hp300_free_irq;
mach_get_model = hp300_get_model;
- mach_get_irq_list = hp300_get_irq_list;
+ mach_get_irq_list = show_hp300_interrupts;
mach_gettimeoffset = hp300_gettimeoffset;
mach_default_handler = &hp300_default_handler;
#if 0
diff -urN S15-pre9/arch/m68k/hp300/ints.c S15-pre9-current/arch/m68k/hp300/ints.c
--- S15-pre9/arch/m68k/hp300/ints.c Fri Feb 16 02:01:57 2001
+++ S15-pre9-current/arch/m68k/hp300/ints.c Thu Nov 22 12:10:06 2001
@@ -148,7 +148,7 @@
spin_unlock_irqrestore(&irqlist_lock, flags);
}

-int hp300_get_irq_list(char *buf)
+int show_hp300_interrupts(struct seq_file *p, void *v)
{
return 0;
}
diff -urN S15-pre9/arch/m68k/kernel/ints.c S15-pre9-current/arch/m68k/kernel/ints.c
--- S15-pre9/arch/m68k/kernel/ints.c Tue Mar 13 00:34:10 2001
+++ S15-pre9-current/arch/m68k/kernel/ints.c Thu Nov 22 11:35:35 2001
@@ -242,22 +242,22 @@
}
}

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

/* autovector interrupts */
if (mach_default_handler) {
for (i = 0; i < SYS_IRQS; i++) {
- len += sprintf(buf+len, "auto %2d: %10u ", i,
+ seq_printf(p, "auto %2d: %10u ", i,
i ? kstat.irqs[0][i] : num_spurious);
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", irq_list[i].devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", irq_list[i].devname);
}
}

- len += mach_get_irq_list(buf+len);
- return len;
+ mach_get_irq_list(p, v);
+ return 0;
}

void init_irq_proc(void)
diff -urN S15-pre9/arch/m68k/kernel/setup.c S15-pre9-current/arch/m68k/kernel/setup.c
--- S15-pre9/arch/m68k/kernel/setup.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/kernel/setup.c Thu Nov 22 11:39:53 2001
@@ -80,7 +80,7 @@
void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) = NULL;
void (*mach_get_model) (char *model) = NULL;
int (*mach_get_hardware_list) (char *buffer) = NULL;
-int (*mach_get_irq_list) (char *) = NULL;
+int (*mach_get_irq_list) (struct seq_file *, void *) = NULL;
void (*mach_process_int) (int, struct pt_regs *) = NULL;
/* machine dependent timer functions */
unsigned long (*mach_gettimeoffset) (void);
diff -urN S15-pre9/arch/m68k/mac/config.c S15-pre9-current/arch/m68k/mac/config.c
--- S15-pre9/arch/m68k/mac/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/mac/config.c Thu Nov 22 11:56:12 2001
@@ -66,7 +66,7 @@
extern unsigned long mac_gettimeoffset (void);
extern int mac_hwclk (int, struct hwclk_time *);
extern int mac_set_clock_mmss (unsigned long);
-extern int mac_get_irq_list(char *);
+extern int show_mac_interrupts(struct seq_file *, void *);
extern void iop_preinit(void);
extern void iop_init(void);
extern void via_init(void);
@@ -241,7 +241,7 @@
disable_irq = mac_disable_irq;
mach_get_model = mac_get_model;
mach_default_handler = &mac_handlers;
- mach_get_irq_list = mac_get_irq_list;
+ mach_get_irq_list = show_mac_interrupts;
mach_gettimeoffset = mac_gettimeoffset;
mach_gettod = mac_gettod;
mach_hwclk = mac_hwclk;
diff -urN S15-pre9/arch/m68k/mac/macints.c S15-pre9-current/arch/m68k/mac/macints.c
--- S15-pre9/arch/m68k/mac/macints.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/mac/macints.c Thu Nov 22 14:11:45 2001
@@ -120,6 +120,7 @@
#include <linux/kernel_stat.h>
#include <linux/interrupt.h> /* for intr_count */
#include <linux/delay.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/irq.h>
@@ -576,9 +577,9 @@
* displayed for us as autovector irq 0.
*/

-int mac_get_irq_list (char *buf)
+int show_mac_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
irq_node_t *node;
char *base;

@@ -618,25 +619,24 @@
case 8: base = "bbn";
break;
}
- len += sprintf(buf+len, "%4s %2d: %10u ",
- base, i, kstat.irqs[0][i]);
+ seq_printf(p, "%4s %2d: %10u ", base, i, kstat.irqs[0][i]);

do {
if (node->flags & IRQ_FLG_FAST) {
- len += sprintf(buf+len, "F ");
+ seq_puts(p, "F ");
} else if (node->flags & IRQ_FLG_SLOW) {
- len += sprintf(buf+len, "S ");
+ seq_puts(p, "S ");
} else {
- len += sprintf(buf+len, " ");
+ seq_puts(p, " ");
}
- len += sprintf(buf+len, "%s\n", node->devname);
+ seq_printf(p, "%s\n", node->devname);
if ((node = node->next)) {
- len += sprintf(buf+len, " ");
+ seq_puts(p, " ");
}
} while(node);

}
- return len;
+ return 0;
}

void mac_default_handler(int irq, void *dev_id, struct pt_regs *regs)
diff -urN S15-pre9/arch/m68k/mvme147/147ints.c S15-pre9-current/arch/m68k/mvme147/147ints.c
--- S15-pre9/arch/m68k/mvme147/147ints.c Thu Feb 15 23:15:54 2001
+++ S15-pre9-current/arch/m68k/mvme147/147ints.c Thu Nov 22 14:11:53 2001
@@ -14,6 +14,7 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/errno.h>
+#include <linux/seq_file.h>

#include <asm/ptrace.h>
#include <asm/system.h>
@@ -112,17 +113,17 @@
}
}

-int mvme147_get_irq_list (char *buf)
+int show_mvme147_interrupts (struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

for (i = 0; i < 256; i++) {
if (irq_tab[i].count)
- len += sprintf (buf+len, "Vec 0x%02x: %8d %s\n",
+ seq_printf(p, "Vec 0x%02x: %8d %s\n",
i, irq_tab[i].count,
irq_tab[i].devname ? irq_tab[i].devname : "free");
}
- return len;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/mvme147/config.c S15-pre9-current/arch/m68k/mvme147/config.c
--- S15-pre9/arch/m68k/mvme147/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/mvme147/config.c Thu Nov 22 11:51:51 2001
@@ -36,7 +36,7 @@
extern void mvme147_process_int (int level, struct pt_regs *regs);
extern void mvme147_init_IRQ (void);
extern void mvme147_free_irq (unsigned int, void *);
-extern int mvme147_get_irq_list (char *);
+extern int show_mvme147_interrupts (struct seq_file *, void *);
extern void mvme147_enable_irq (unsigned int);
extern void mvme147_disable_irq (unsigned int);
static void mvme147_get_model(char *model);
@@ -113,7 +113,7 @@
mach_reset = mvme147_reset;
mach_free_irq = mvme147_free_irq;
mach_process_int = mvme147_process_int;
- mach_get_irq_list = mvme147_get_irq_list;
+ mach_get_irq_list = show_mvme147_interrupts;
mach_request_irq = mvme147_request_irq;
enable_irq = mvme147_enable_irq;
disable_irq = mvme147_disable_irq;
diff -urN S15-pre9/arch/m68k/mvme16x/16xints.c S15-pre9-current/arch/m68k/mvme16x/16xints.c
--- S15-pre9/arch/m68k/mvme16x/16xints.c Thu Feb 15 23:15:54 2001
+++ S15-pre9-current/arch/m68k/mvme16x/16xints.c Thu Nov 22 14:12:01 2001
@@ -14,6 +14,7 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/errno.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/ptrace.h>
@@ -114,17 +115,17 @@
}
}

-int mvme16x_get_irq_list (char *buf)
+int show_mvme16x_interrupts (struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

for (i = 0; i < 192; i++) {
if (irq_tab[i].count)
- len += sprintf (buf+len, "Vec 0x%02x: %8d %s\n",
+ seq_printf(p, "Vec 0x%02x: %8d %s\n",
i+64, irq_tab[i].count,
irq_tab[i].devname ? irq_tab[i].devname : "free");
}
- return len;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/mvme16x/config.c S15-pre9-current/arch/m68k/mvme16x/config.c
--- S15-pre9/arch/m68k/mvme16x/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/mvme16x/config.c Thu Nov 22 11:47:34 2001
@@ -40,7 +40,7 @@
extern void mvme16x_process_int (int level, struct pt_regs *regs);
extern void mvme16x_init_IRQ (void);
extern void mvme16x_free_irq (unsigned int, void *);
-extern int mvme16x_get_irq_list (char *);
+extern int show_mvme16x_interrupts (struct seq_file *, void *);
extern void mvme16x_enable_irq (unsigned int);
extern void mvme16x_disable_irq (unsigned int);
static void mvme16x_get_model(char *model);
@@ -156,7 +156,7 @@
mach_reset = mvme16x_reset;
mach_free_irq = mvme16x_free_irq;
mach_process_int = mvme16x_process_int;
- mach_get_irq_list = mvme16x_get_irq_list;
+ mach_get_irq_list = show_mvme16x_interrupts;
mach_request_irq = mvme16x_request_irq;
enable_irq = mvme16x_enable_irq;
disable_irq = mvme16x_disable_irq;
diff -urN S15-pre9/arch/m68k/q40/config.c S15-pre9-current/arch/m68k/q40/config.c
--- S15-pre9/arch/m68k/q40/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/q40/config.c Thu Nov 22 11:44:57 2001
@@ -45,7 +45,7 @@
extern void (*q40_sys_default_handler[]) (int, void *, struct pt_regs *); /* added just for debugging */
extern void q40_init_IRQ (void);
extern void q40_free_irq (unsigned int, void *);
-extern int q40_get_irq_list (char *);
+extern int show_q40_interrupts (struct seq_file *, void *);
extern void q40_enable_irq (unsigned int);
extern void q40_disable_irq (unsigned int);
static void q40_get_model(char *model);
@@ -236,7 +236,7 @@
mach_reset = q40_reset;
mach_free_irq = q40_free_irq;
mach_process_int = q40_process_int;
- mach_get_irq_list = q40_get_irq_list;
+ mach_get_irq_list = show_q40_interrupts;
mach_request_irq = q40_request_irq;
enable_irq = q40_enable_irq;
disable_irq = q40_disable_irq;
diff -urN S15-pre9/arch/m68k/q40/q40ints.c S15-pre9-current/arch/m68k/q40/q40ints.c
--- S15-pre9/arch/m68k/q40/q40ints.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/q40/q40ints.c Thu Nov 22 14:12:09 2001
@@ -17,6 +17,7 @@
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/sched.h>
+#include <linux/seq_file.h>

#include <asm/rtc.h>
#include <asm/ptrace.h>
@@ -431,21 +432,20 @@
}
}

-int q40_get_irq_list (char *buf)
+int show_q40_interrupts (struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

- for (i = 0; i <= Q40_IRQ_MAX; i++)
- {
+ for (i = 0; i <= Q40_IRQ_MAX; i++) {
if (irq_tab[i].count)
- len += sprintf (buf+len, "%sIRQ %02d: %8d %s%s\n",
+ seq_printf(p, "%sIRQ %02d: %8d %s%s\n",
(i<=15) ? "ISA-" : " " ,
i, irq_tab[i].count,
irq_tab[i].devname[0] ? irq_tab[i].devname : "?",
irq_tab[i].handler == q40_defhand ?
" (now unassigned)" : "");
}
- return len;
+ return 0;
}


diff -urN S15-pre9/arch/m68k/sun3/config.c S15-pre9-current/arch/m68k/sun3/config.c
--- S15-pre9/arch/m68k/sun3/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/sun3/config.c Thu Nov 22 11:41:29 2001
@@ -36,7 +36,7 @@
char sun3_reserved_pmeg[SUN3_PMEGS_NUM];

extern unsigned long sun3_gettimeoffset(void);
-extern int sun3_get_irq_list (char *);
+extern int show_sun3_interrupts (char *);
extern void sun3_sched_init(void (*handler)(int, void *, struct pt_regs *));
extern void sun3_get_model (char* model);
extern void idprom_init (void);
@@ -145,7 +145,7 @@
enable_irq = sun3_enable_irq;
disable_irq = sun3_disable_irq;
mach_process_int = sun3_process_int;
- mach_get_irq_list = sun3_get_irq_list;
+ mach_get_irq_list = show_sun3_interrupts;
mach_gettod = sun3_gettod;
mach_reset = sun3_reboot;
mach_gettimeoffset = sun3_gettimeoffset;
diff -urN S15-pre9/arch/m68k/sun3/sun3ints.c S15-pre9-current/arch/m68k/sun3/sun3ints.c
--- S15-pre9/arch/m68k/sun3/sun3ints.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/sun3/sun3ints.c Thu Nov 22 14:12:17 2001
@@ -15,6 +15,7 @@
#include <asm/intersil.h>
#include <asm/oplib.h>
#include <asm/sun3ints.h>
+#include <linux/seq_file.h>

extern void sun3_leds (unsigned char);

@@ -62,7 +63,7 @@
*sun3_intreg |= (1<<irq);
}

-int sun3_get_irq_list(char *buf)
+int show_sun3_interrupts(struct seq_file *p, void *v)
{
return 0;
}
diff -urN S15-pre9/arch/m68k/sun3x/config.c S15-pre9-current/arch/m68k/sun3x/config.c
--- S15-pre9/arch/m68k/sun3x/config.c Tue Jul 3 21:09:05 2001
+++ S15-pre9-current/arch/m68k/sun3x/config.c Thu Nov 22 11:41:37 2001
@@ -58,7 +58,7 @@

sun3x_prom_init();

- mach_get_irq_list = sun3_get_irq_list;
+ mach_get_irq_list = show_sun3_interrupts;
mach_max_dma_address = 0xffffffff; /* we can DMA anywhere, whee */

mach_keyb_init = sun3x_keyb_init;
diff -urN S15-pre9/arch/mips/baget/irq.c S15-pre9-current/arch/mips/baget/irq.c
--- S15-pre9/arch/mips/baget/irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/baget/irq.c Thu Nov 22 14:12:37 2001
@@ -17,6 +17,7 @@
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/delay.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -141,27 +142,27 @@
*/
static struct irqaction *irq_action[BAGET_IRQ_NR] = { NULL, };

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction * action;

for (i = 0 ; i < BAGET_IRQ_NR ; i++) {
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
i, kstat.irqs[0][i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}


diff -urN S15-pre9/arch/mips/dec/irq.c S15-pre9-current/arch/mips/dec/irq.c
--- S15-pre9/arch/mips/dec/irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/dec/irq.c Thu Nov 22 14:12:46 2001
@@ -15,6 +15,7 @@
#include <linux/timex.h>
#include <linux/slab.h>
#include <linux/random.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -92,27 +93,27 @@
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
- struct irqaction *action;
+ int i;
+ struct irqaction *action;

- for (i = 0; i < 32; i++) {
- action = irq_action[i];
- if (!action)
- continue;
- len += sprintf(buf + len, "%2d: %8d %c %s",
- i, kstat.irqs[0][i],
- (action->flags & SA_INTERRUPT) ? '+' : ' ',
- action->name);
- for (action = action->next; action; action = action->next) {
- len += sprintf(buf + len, ",%s %s",
- (action->flags & SA_INTERRUPT) ? " +" : "",
- action->name);
+ for (i = 0; i < 32; i++) {
+ action = irq_action[i];
+ if (!action)
+ continue;
+ seq_printf(p, "%2d: %8d %c %s",
+ i, kstat.irqs[0][i],
+ (action->flags & SA_INTERRUPT) ? '+' : ' ',
+ action->name);
+ for (action = action->next; action; action = action->next) {
+ seq_printf(p, ",%s %s",
+ (action->flags & SA_INTERRUPT) ? " +" : "",
+ action->name);
+ }
+ seq_putc(p, '\n');
}
- len += sprintf(buf + len, "\n");
- }
- return len;
+ return 0;
}

/*
diff -urN S15-pre9/arch/mips/ite-boards/generic/irq.c S15-pre9-current/arch/mips/ite-boards/generic/irq.c
--- S15-pre9/arch/mips/ite-boards/generic/irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/ite-boards/generic/irq.c Thu Nov 22 14:12:53 2001
@@ -46,6 +46,7 @@
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/serial_reg.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -217,34 +218,34 @@
};


-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0, j;
+ int i, j;
struct irqaction * action;

- len += sprintf(buf+len, " ");
+ seq_printf(p, " ");
for (j=0; j<smp_num_cpus; j++)
- len += sprintf(buf+len, "CPU%d ",j);
- *(char *)(buf+len++) = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_desc[i].action;
if ( !action || !action->handler )
continue;
- len += sprintf(buf+len, "%3d: ", i);
- len += sprintf(buf+len, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%3d: ", i);
+ seq_printf(p, "%10u ", kstat_irqs(i));
if ( irq_desc[i].handler )
- len += sprintf(buf+len, " %s ", irq_desc[i].handler->typename );
+ seq_printf(p, " %s ", irq_desc[i].handler->typename );
else
- len += sprintf(buf+len, " None ");
- len += sprintf(buf+len, " %s",action->name);
+ seq_puts(p, " None ");
+ seq_printf(p, " %s",action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ", %s", action->name);
+ seq_printf(p, ", %s", action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- len += sprintf(buf+len, "BAD: %10lu\n", spurious_count);
- return len;
+ seq_printf(p, "BAD: %10lu\n", spurious_count);
+ return 0;
}

asmlinkage void do_IRQ(int irq, struct pt_regs *regs)
diff -urN S15-pre9/arch/mips/kernel/irq.c S15-pre9-current/arch/mips/kernel/irq.c
--- S15-pre9/arch/mips/kernel/irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/kernel/irq.c Thu Nov 22 14:13:20 2001
@@ -17,6 +17,7 @@
#include <linux/mm.h>
#include <linux/random.h>
#include <linux/sched.h>
+#include <linux/seq_file.h>

#include <asm/system.h>

@@ -69,32 +70,31 @@
* Generic, controller-independent functions:
*/

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
struct irqaction * action;
- char *p = buf;
int i;

- p += sprintf(p, " ");
+ seq_puts(p, " ");
for (i=0; i < 1 /*smp_num_cpus*/; i++)
- p += sprintf(p, "CPU%d ", i);
- *p++ = '\n';
+ seq_printf(p, "CPU%d ", i);
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: ",i);
- p += sprintf(p, "%10u ", kstat_irqs(i));
- p += sprintf(p, " %14s", irq_desc[i].handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, "%3d: ",i);
+ seq_printf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, " %14s", irq_desc[i].handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
- p += sprintf(p, ", %s", action->name);
- *p++ = '\n';
+ seq_printf(p, ", %s", action->name);
+ seq_putc(p, '\n');
}
- p += sprintf(p, "ERR: %10lu\n", irq_err_count);
- return p - buf;
+ seq_printf(p, "ERR: %10lu\n", irq_err_count);
+ return 0;
}

/*
diff -urN S15-pre9/arch/mips/kernel/old-irq.c S15-pre9-current/arch/mips/kernel/old-irq.c
--- S15-pre9/arch/mips/kernel/old-irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/kernel/old-irq.c Thu Nov 22 14:13:26 2001
@@ -24,6 +24,7 @@
#include <linux/timex.h>
#include <linux/slab.h>
#include <linux/random.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -123,27 +124,27 @@
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction * action;

for (i = 0 ; i < 32 ; i++) {
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
i, kstat.irqs[0][i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

static inline void i8259_mask_and_ack_irq(int irq)
diff -urN S15-pre9/arch/mips/mips-boards/atlas/atlas_int.c S15-pre9-current/arch/mips/mips-boards/atlas/atlas_int.c
--- S15-pre9/arch/mips/mips-boards/atlas/atlas_int.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/mips-boards/atlas/atlas_int.c Thu Nov 22 14:13:33 2001
@@ -29,6 +29,7 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/kernel_stat.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/mips-boards/atlas.h>
@@ -93,9 +94,9 @@
NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
int num = 0;
struct irqaction *action;

@@ -103,18 +104,18 @@
action = irq_desc[i].action;
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [hw0]\n");
+ seq_printf(p, " [hw0]\n");
}
- return len;
+ return 0;
}

int request_irq(unsigned int irq,
diff -urN S15-pre9/arch/mips/philips/nino/irq.c S15-pre9-current/arch/mips/philips/nino/irq.c
--- S15-pre9/arch/mips/philips/nino/irq.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips/philips/nino/irq.c Thu Nov 22 14:13:42 2001
@@ -23,6 +23,7 @@
#include <linux/timex.h>
#include <linux/slab.h>
#include <linux/random.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -114,27 +115,27 @@
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction *action;

for (i = 0; i < NR_IRQS; i++) {
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf + len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
i, kstat.irqs[0][i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action = action->next; action; action = action->next) {
- len += sprintf(buf + len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf + len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

atomic_t __mips_bh_counter;
diff -urN S15-pre9/arch/mips64/mips-boards/atlas/atlas_int.c S15-pre9-current/arch/mips64/mips-boards/atlas/atlas_int.c
--- S15-pre9/arch/mips64/mips-boards/atlas/atlas_int.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips64/mips-boards/atlas/atlas_int.c Thu Nov 22 14:13:49 2001
@@ -29,6 +29,7 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/kernel_stat.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/mips-boards/atlas.h>
@@ -89,9 +90,9 @@
NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
int num = 0;
struct irqaction *action;

@@ -99,18 +100,18 @@
action = irq_desc[i].action;
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [hw0]\n");
+ seq_puts(p, " [hw0]\n");
}
- return len;
+ return 0;
}

int request_irq(unsigned int irq,
diff -urN S15-pre9/arch/mips64/mips-boards/malta/malta_int.c S15-pre9-current/arch/mips64/mips-boards/malta/malta_int.c
--- S15-pre9/arch/mips64/mips-boards/malta/malta_int.c Sun Sep 23 16:11:56 2001
+++ S15-pre9-current/arch/mips64/mips-boards/malta/malta_int.c Thu Nov 22 14:13:55 2001
@@ -32,6 +32,7 @@
#include <linux/interrupt.h>
#include <linux/kernel_stat.h>
#include <linux/random.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/io.h>
@@ -119,9 +120,9 @@
}


-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
int num = 0;
struct irqaction *action;

@@ -129,33 +130,33 @@
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [on-chip]\n");
+ seq_puts(p, " [on-chip]\n");
}
for (i = 0; i < MALTAINT_END; i++, num++) {
action = hw0_irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [hw0]\n");
+ seq_puts(p, " [hw0]\n");
}
- return len;
+ return 0;
}

int request_irq(unsigned int irq,
diff -urN S15-pre9/arch/mips64/sgi-ip22/ip22-int.c S15-pre9-current/arch/mips64/sgi-ip22/ip22-int.c
--- S15-pre9/arch/mips64/sgi-ip22/ip22-int.c Sun Sep 23 16:11:57 2001
+++ S15-pre9-current/arch/mips64/sgi-ip22/ip22-int.c Thu Nov 22 14:14:04 2001
@@ -8,6 +8,7 @@
*/
#include <linux/config.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <linux/errno.h>
#include <linux/kernel_stat.h>
@@ -231,9 +232,9 @@
NULL, NULL, NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
int num = 0;
struct irqaction * action;

@@ -241,33 +242,33 @@
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [on-chip]\n");
+ seq_puts(p, " [on-chip]\n");
}
for (i = 0 ; i < 24 ; i++, num++) {
action = local_irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s",
+ seq_printf(p, "%2d: %8d %c %s",
num, kstat.irqs[0][num],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, " [local]\n");
+ seq_puts(p, " [local]\n");
}
- return len;
+ return 0;
}

/*
diff -urN S15-pre9/arch/mips64/sgi-ip27/ip27-irq.c S15-pre9-current/arch/mips64/sgi-ip27/ip27-irq.c
--- S15-pre9/arch/mips64/sgi-ip27/ip27-irq.c Sun Sep 23 16:11:57 2001
+++ S15-pre9-current/arch/mips64/sgi-ip27/ip27-irq.c Thu Nov 22 14:14:10 2001
@@ -20,6 +20,7 @@
#include <linux/kernel_stat.h>
#include <linux/delay.h>
#include <linux/irq.h>
+#include <linux/seq_file.h>

#include <asm/bitops.h>
#include <asm/bootinfo.h>
@@ -136,27 +137,27 @@
/* This is stupid for an Origin which can have thousands of IRQs ... */
static struct irqaction *irq_action[NR_IRQS];

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction * action;

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_action[i];
if (!action)
continue;
- len += sprintf(buf+len, "%2d: %8d %c %s", i, kstat.irqs[0][i],
+ seq_printf(p, "%2d: %8d %c %s", i, kstat.irqs[0][i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT)
? " +" : "",
action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

/*
diff -urN S15-pre9/arch/parisc/kernel/irq.c S15-pre9-current/arch/parisc/kernel/irq.c
--- S15-pre9/arch/parisc/kernel/irq.c Fri Feb 16 22:54:22 2001
+++ S15-pre9-current/arch/parisc/kernel/irq.c Thu Nov 22 14:14:16 2001
@@ -39,6 +39,7 @@
#include <linux/random.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
+#include <linux/seq_file.h>

#include <asm/cache.h>

@@ -160,19 +161,18 @@
BUG();
}

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
#ifdef CONFIG_PROC_FS
- char *p = buf;
int i, j;
int regnr, irq_no;
struct irq_region *region;
struct irqaction *action, *mainaction;

- p += sprintf(p, " ");
+ seq_puts(p, " ");
for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
- *p++ = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (regnr = 0; regnr < NR_IRQ_REGS; regnr++) {
region = irq_region[regnr];
@@ -188,40 +188,34 @@

irq_no = IRQ_FROM_REGION(regnr) + i;

- p += sprintf(p, "%3d: ", irq_no);
+ seq_printf(p, "%3d: ", irq_no);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(irq_no));
+ seq_printf(p, "%10u ", kstat_irqs(irq_no));
#else
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][irq_no]);
#endif
- p += sprintf(p, " %14s",
+ seq_printf(p, " %14s",
region->data.name ? region->data.name : "N/A");
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
- p += sprintf(p, ", %s", action->name);
- *p++ = '\n';
+ seq_printf(p, ", %s", action->name);
+ seq_putc(p, '\n');
}
}

- p += sprintf(p, "\n");
+ seq_putc(p, '\n');
#if CONFIG_SMP
- p += sprintf(p, "LOC: ");
+ seq_puts(p, "LOC: ");
for (j = 0; j < smp_num_cpus; j++)
- p += sprintf(p, "%10u ",
+ seq_printf(p, "%10u ",
apic_timer_irqs[cpu_logical_map(j)]);
- p += sprintf(p, "\n");
+ seq_putc(p, '\n');
#endif
-
- return p - buf;
-
-#else /* CONFIG_PROC_FS */
-
- return 0;
-
#endif /* CONFIG_PROC_FS */
+ return 0;
}


diff -urN S15-pre9/arch/ppc/amiga/amiints.c S15-pre9-current/arch/ppc/amiga/amiints.c
--- S15-pre9/arch/ppc/amiga/amiints.c Thu May 24 18:25:07 2001
+++ S15-pre9-current/arch/ppc/amiga/amiints.c Thu Nov 22 14:14:26 2001
@@ -44,6 +44,7 @@
#include <linux/sched.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/irq.h>
@@ -61,7 +62,7 @@
unsigned long flags, const char *devname, void *dev_id);
extern void cia_free_irq(unsigned int irq, void *dev_id);
extern void cia_init_IRQ(struct ciabase *base);
-extern int cia_get_irq_list(struct ciabase *base, char *buf);
+extern int cia_get_irq_list(struct ciabase *base, struct seq_file *p);

/* irq node variables for amiga interrupt sources */
static irq_node_t *ami_irq_list[AMI_STD_IRQS];
@@ -480,28 +481,28 @@
};
#endif

-int amiga_get_irq_list(char *buf)
+int show_amiga_intreeupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
irq_node_t *node;

for (i = 0; i < AMI_STD_IRQS; i++) {
if (!(node = ami_irq_list[i]))
continue;
- len += sprintf(buf+len, "ami %2d: %10u ", i,
+ seq_printf(p, "ami %2d: %10u ", i,
kstat.irqs[0][SYS_IRQS + i]);
do {
if (node->flags & SA_INTERRUPT)
- len += sprintf(buf+len, "F ");
+ seq_puts(p, "F ");
else
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", node->devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", node->devname);
if ((node = node->next))
- len += sprintf(buf+len, " ");
+ seq_puts(p, " ");
} while (node);
}

- len += cia_get_irq_list(&ciaa_base, buf+len);
- len += cia_get_irq_list(&ciab_base, buf+len);
+ cia_get_irq_list(&ciaa_base, p);
+ cia_get_irq_list(&ciab_base, p);
return len;
}
diff -urN S15-pre9/arch/ppc/amiga/cia.c S15-pre9-current/arch/ppc/amiga/cia.c
--- S15-pre9/arch/ppc/amiga/cia.c Thu May 24 18:25:07 2001
+++ S15-pre9-current/arch/ppc/amiga/cia.c Thu Nov 22 14:14:33 2001
@@ -19,6 +19,7 @@
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/irq.h>
#include <asm/amigahw.h>
@@ -222,16 +223,16 @@
custom.intena = IF_SETCLR | base->int_mask;
}

-int cia_get_irq_list(struct ciabase *base, char *buf)
+int cia_get_irq_list(struct ciabase *base, struct seq_file *p)
{
- int i, j, len = 0;
+ int i, j;

j = base->cia_irq;
for (i = 0; i < CIA_IRQS; i++) {
- len += sprintf(buf+len, "cia %2d: %10d ", j + i,
+ seq_printf(p, "cia %2d: %10d ", j + i,
kstat.irqs[0][SYS_IRQS + j + i]);
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", base->irq_list[i].devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", base->irq_list[i].devname);
}
- return len;
+ return 0;
}
diff -urN S15-pre9/arch/ppc/amiga/config.c S15-pre9-current/arch/ppc/amiga/config.c
--- S15-pre9/arch/ppc/amiga/config.c Wed Oct 24 04:09:51 2001
+++ S15-pre9-current/arch/ppc/amiga/config.c Thu Nov 22 14:14:42 2001
@@ -28,6 +28,7 @@
#ifdef CONFIG_ZORRO
#include <linux/zorro.h>
#endif
+#include <linux/seq_file.h>

#include <asm/bootinfo.h>
#include <asm/setup.h>
@@ -91,7 +92,7 @@
extern void amiga_disable_irq (unsigned int);
static void amiga_get_model(char *model);
static int amiga_get_hardware_list(char *buffer);
-extern int amiga_get_irq_list (char *);
+extern int show_amiga_interrupts (struct seq_file *, void *);
/* amiga specific timer functions */
static unsigned long amiga_gettimeoffset (void);
static void a3000_gettod (int *, int *, int *, int *, int *, int *);
@@ -422,7 +423,7 @@
#endif
mach_get_model = amiga_get_model;
mach_get_hardware_list = amiga_get_hardware_list;
- mach_get_irq_list = amiga_get_irq_list;
+ mach_get_irq_list = show_amiga_interrupts;
mach_gettimeoffset = amiga_gettimeoffset;
if (AMIGAHW_PRESENT(A3000_CLK)){
mach_gettod = a3000_gettod;
diff -urN S15-pre9/arch/ppc/amiga/ints.c S15-pre9-current/arch/ppc/amiga/ints.c
--- S15-pre9/arch/ppc/amiga/ints.c Thu May 24 18:25:07 2001
+++ S15-pre9-current/arch/ppc/amiga/ints.c Thu Nov 22 14:14:48 2001
@@ -13,6 +13,7 @@
#include <linux/kernel_stat.h>
#include <linux/errno.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/setup.h>
#include <asm/system.h>
@@ -143,20 +144,20 @@
}
}

-int m68k_get_irq_list(char *buf)
+int m68k_get_irq_list(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;

/* autovector interrupts */
if (mach_default_handler) {
for (i = 0; i < SYS_IRQS; i++) {
- len += sprintf(buf+len, "auto %2d: %10u ", i,
+ seq_printf(p, "auto %2d: %10u ", i,
i ? kstat.irqs[0][i] : num_spurious);
- len += sprintf(buf+len, " ");
- len += sprintf(buf+len, "%s\n", irq_list[i].devname);
+ seq_puts(p, " ");
+ seq_printf(p, "%s\n", irq_list[i].devname);
}
}

- len += mach_get_irq_list(buf+len);
- return len;
+ mach_get_irq_list(p, v);
+ return 0;
}
diff -urN S15-pre9/arch/ppc/kernel/apus_setup.c S15-pre9-current/arch/ppc/kernel/apus_setup.c
--- S15-pre9/arch/ppc/kernel/apus_setup.c Thu Nov 22 03:56:13 2001
+++ S15-pre9-current/arch/ppc/kernel/apus_setup.c Thu Nov 22 11:28:46 2001
@@ -95,7 +95,7 @@
void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) = NULL;
void (*mach_get_model) (char *model) = NULL;
int (*mach_get_hardware_list) (char *buffer) = NULL;
-int (*mach_get_irq_list) (char *) = NULL;
+int (*mach_get_irq_list) (struct seq_file *, void *) = NULL;
void (*mach_process_int) (int, struct pt_regs *) = NULL;
/* machine dependent timer functions */
unsigned long (*mach_gettimeoffset) (void);
@@ -671,12 +671,12 @@
return irq;
}

-int apus_get_irq_list(char *buf)
+int show_apus_interrupts(struct seq_file *p, void *v)
{
#ifdef CONFIG_APUS
- extern int amiga_get_irq_list(char *buf);
+ extern int show_amiga_interrupts(struct seq_file *p, void *v)

- return amiga_get_irq_list (buf);
+ return show_amiga_interrupts(p, v);
#else
return 0;
#endif
diff -urN S15-pre9/arch/ppc/kernel/irq.c S15-pre9-current/arch/ppc/kernel/irq.c
--- S15-pre9/arch/ppc/kernel/irq.c Sun Sep 23 16:11:57 2001
+++ S15-pre9-current/arch/ppc/kernel/irq.c Thu Nov 22 14:15:03 2001
@@ -47,6 +47,7 @@
#include <linux/irq.h>
#include <linux/proc_fs.h>
#include <linux/random.h>
+#include <linux/seq_file.h>

#include <asm/uaccess.h>
#include <asm/bitops.h>
@@ -371,58 +372,58 @@
spin_unlock_irqrestore(&desc->lock, flags);
}

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
#ifdef CONFIG_APUS
- return apus_get_irq_list (buf);
+ return show_apus_interrupts(p, v);
#else
- int i, len = 0, j;
+ int i, j;
struct irqaction * action;

- len += sprintf(buf+len, " ");
+ seq_puts(p, " ");
for (j=0; j<smp_num_cpus; j++)
- len += sprintf(buf+len, "CPU%d ",j);
- *(char *)(buf+len++) = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++) {
action = irq_desc[i].action;
if ( !action || !action->handler )
continue;
- len += sprintf(buf+len, "%3d: ", i);
+ seq_printf(p, "%3d: ", i);
#ifdef CONFIG_SMP
for (j = 0; j < smp_num_cpus; j++)
- len += sprintf(buf+len, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#else
- len += sprintf(buf+len, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#endif /* CONFIG_SMP */
if ( irq_desc[i].handler )
- len += sprintf(buf+len, " %s ", irq_desc[i].handler->typename );
+ seq_printf(p, " %s ", irq_desc[i].handler->typename );
else
- len += sprintf(buf+len, " None ");
- len += sprintf(buf+len, "%s", (irq_desc[i].status & IRQ_LEVEL) ? "Level " : "Edge ");
- len += sprintf(buf+len, " %s",action->name);
+ seq_puts(p, " None ");
+ seq_printf(p, "%s", (irq_desc[i].status & IRQ_LEVEL) ? "Level " : "Edge ");
+ seq_printf(p, " %s",action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ", %s", action->name);
+ seq_printf(p, ", %s", action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
#ifdef CONFIG_TAU_INT
if (tau_initialized){
- len += sprintf(buf+len, "TAU: ");
+ seq_puts(p, "TAU: ");
for (j = 0; j < smp_num_cpus; j++)
- len += sprintf(buf+len, "%10u ",
+ seq_printf(p, "%10u ",
tau_interrupts(j));
- len += sprintf(buf+len, " PowerPC Thermal Assist (cpu temp)\n");
+ seq_puts(p, " PowerPC Thermal Assist (cpu temp)\n");
}
#endif
#ifdef CONFIG_SMP
/* should this be per processor send/receive? */
- len += sprintf(buf+len, "IPI (recv/sent): %10u/%u\n",
+ seq_printf(p, "IPI (recv/sent): %10u/%u\n",
atomic_read(&ipi_recv), atomic_read(&ipi_sent));
#endif
- len += sprintf(buf+len, "BAD: %10u\n", ppc_spurious_interrupts);
- return len;
+ seq_printf(p, "BAD: %10u\n", ppc_spurious_interrupts);
+ return 0;
#endif /* CONFIG_APUS */
}

diff -urN S15-pre9/arch/s390/kernel/irq.c S15-pre9-current/arch/s390/kernel/irq.c
--- S15-pre9/arch/s390/kernel/irq.c Sat Aug 11 14:59:21 2001
+++ S15-pre9-current/arch/s390/kernel/irq.c Thu Nov 22 10:40:44 2001
@@ -28,6 +28,7 @@
#include <linux/threads.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/io.h>
@@ -59,22 +60,19 @@
BUILD_SMP_INTERRUPT(spurious_interrupt)
#endif

-#if 0
-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i, j;
struct irqaction * action;
- char *p = buf;

- p += sprintf(p, " ");
+ seq_puts(p, " ");

for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
+ seq_printf(p, "CPU%d ",j);

- *p++ = '\n';
+ seq_putc(p, '\n');

- for (i = 0 ; i < NR_IRQS ; i++)
- {
+ for (i = 0 ; i < NR_IRQS ; i++) {
if (ioinfo[i] == INVALID_STORAGE_AREA)
continue;

@@ -83,35 +81,33 @@
if (!action)
continue;

- p += sprintf(p, "%3d: ",i);
+ seq_printf(p, "%3d: ",i);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j=0; j<smp_num_cpus; j++)
- p += sprintf( p, "%10u ",
+ seq_printf( p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- p += sprintf(p, " %14s", ioinfo[i]->irq_desc.handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, " %14s", ioinfo[i]->irq_desc.handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
{
- p += sprintf(p, ", %s", action->name);
+ seq_printf(p, ", %s", action->name);

} /* endfor */

- *p++ = '\n';
+ seq_putc(p, '\n');

} /* endfor */

- p += sprintf(p, "NMI: %10u\n", nmi_counter);
+ seq_printf(p, "NMI: %10u\n", nmi_counter);
#ifdef CONFIG_SMP
- p += sprintf(p, "IPI: %10u\n", atomic_read(&ipi_count));
+ seq_printf(p, "IPI: %10u\n", atomic_read(&ipi_count));
#endif
-
- return p - buf;
+ return 0;
}
-#endif

/*
* Global interrupt locks for SMP. Allow interrupts to come in on any
diff -urN S15-pre9/arch/s390x/kernel/irq.c S15-pre9-current/arch/s390x/kernel/irq.c
--- S15-pre9/arch/s390x/kernel/irq.c Sat Aug 11 14:59:21 2001
+++ S15-pre9-current/arch/s390x/kernel/irq.c Thu Nov 22 10:40:44 2001
@@ -28,6 +28,7 @@
#include <linux/threads.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/io.h>
@@ -59,19 +60,17 @@
BUILD_SMP_INTERRUPT(spurious_interrupt)
#endif

-#if 0
-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i, j;
struct irqaction * action;
- char *p = buf;

- p += sprintf(p, " ");
+ seq_puts(p, " ");

for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
+ seq_printf(p, "CPU%d ",j);

- *p++ = '\n';
+ seq_putc(p, '\n');

for (i = 0 ; i < NR_IRQS ; i++)
{
@@ -83,35 +82,34 @@
if (!action)
continue;

- p += sprintf(p, "%3d: ",i);
+ seq_printf(p, "%3d: ",i);
#ifndef CONFIG_SMP
- p += sprintf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j=0; j<smp_num_cpus; j++)
- p += sprintf( p, "%10u ",
+ seq_printf( p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- p += sprintf(p, " %14s", ioinfo[i]->irq_desc.handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, " %14s", ioinfo[i]->irq_desc.handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
{
- p += sprintf(p, ", %s", action->name);
+ seq_printf(p, ", %s", action->name);

} /* endfor */

- *p++ = '\n';
+ seq_putc(p, '\n');

} /* endfor */

- p += sprintf(p, "NMI: %10u\n", nmi_counter);
+ seq_printf(p, "NMI: %10u\n", nmi_counter);
#ifdef CONFIG_SMP
- p += sprintf(p, "IPI: %10u\n", atomic_read(&ipi_count));
+ seq_printf(p, "IPI: %10u\n", atomic_read(&ipi_count));
#endif

- return p - buf;
+ return 0;
}
-#endif

/*
* Global interrupt locks for SMP. Allow interrupts to come in on any
diff -urN S15-pre9/arch/sh/kernel/irq.c S15-pre9-current/arch/sh/kernel/irq.c
--- S15-pre9/arch/sh/kernel/irq.c Sun Sep 23 16:11:57 2001
+++ S15-pre9-current/arch/sh/kernel/irq.c Thu Nov 22 14:15:17 2001
@@ -27,6 +27,7 @@
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
+#include <linux/seq_file.h>

#include <asm/system.h>
#include <asm/io.h>
@@ -84,31 +85,30 @@
*/

#if defined(CONFIG_PROC_FS)
-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
int i, j;
struct irqaction * action;
- char *p = buf;

- p += sprintf(p, " ");
+ seq_puts(p, " ");
for (j=0; j<smp_num_cpus; j++)
- p += sprintf(p, "CPU%d ",j);
- *p++ = '\n';
+ seq_printf(p, "CPU%d ",j);
+ seq_putc(p, '\n');

for (i = 0 ; i < ACTUAL_NR_IRQS ; i++) {
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: ",i);
- p += sprintf(p, "%10u ", kstat_irqs(i));
- p += sprintf(p, " %14s", irq_desc[i].handler->typename);
- p += sprintf(p, " %s", action->name);
+ seq_printf(p, "%3d: ",i);
+ seq_printf(p, "%10u ", kstat_irqs(i));
+ seq_printf(p, " %14s", irq_desc[i].handler->typename);
+ seq_printf(p, " %s", action->name);

for (action=action->next; action; action = action->next)
- p += sprintf(p, ", %s", action->name);
- *p++ = '\n';
+ seq_printf(p, ", %s", action->name);
+ seq_putc(p, '\n');
}
- return p - buf;
+ return 0;
}
#endif

diff -urN S15-pre9/arch/sparc/kernel/irq.c S15-pre9-current/arch/sparc/kernel/irq.c
--- S15-pre9/arch/sparc/kernel/irq.c Sun Jul 29 01:54:42 2001
+++ S15-pre9-current/arch/sparc/kernel/irq.c Thu Nov 22 14:15:23 2001
@@ -27,6 +27,7 @@
#include <linux/delay.h>
#include <linux/threads.h>
#include <linux/spinlock.h>
+#include <linux/seq_file.h>

#include <asm/ptrace.h>
#include <asm/processor.h>
@@ -97,42 +98,42 @@
NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL
};

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction * action;
#ifdef CONFIG_SMP
int j;
#endif

if (sparc_cpu_model == sun4d) {
- extern int sun4d_get_irq_list(char *);
+ extern int show_sun4d_interrupts(struct seq_file *, void *);

- return sun4d_get_irq_list(buf);
+ return show_sun4d_interrupts(p, v);
}
for (i = 0 ; i < (NR_IRQS+1) ; i++) {
action = *(i + irq_action);
if (!action)
continue;
- len += sprintf(buf+len, "%3d: ", i);
+ seq_printf(p, "%3d: ", i);
#ifndef CONFIG_SMP
- len += sprintf(buf+len, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (j = 0; j < smp_num_cpus; j++)
- len += sprintf(buf+len, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- len += sprintf(buf+len, " %c %s",
+ seq_printf(p, " %c %s",
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

void free_irq(unsigned int irq, void *dev_id)
diff -urN S15-pre9/arch/sparc/kernel/sun4d_irq.c S15-pre9-current/arch/sparc/kernel/sun4d_irq.c
--- S15-pre9/arch/sparc/kernel/sun4d_irq.c Sun Jul 29 01:54:42 2001
+++ S15-pre9-current/arch/sparc/kernel/sun4d_irq.c Thu Nov 22 14:15:29 2001
@@ -20,6 +20,7 @@
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/spinlock.h>
+#include <linux/seq_file.h>

#include <asm/ptrace.h>
#include <asm/processor.h>
@@ -72,9 +73,9 @@
spinlock_t sun4d_imsk_lock = SPIN_LOCK_UNLOCKED;
#endif

-int sun4d_get_irq_list(char *buf)
+int show_sun4d_interrupts(struct seq_file *p, void *v)
{
- int i, j = 0, k = 0, len = 0, sbusl;
+ int i, j = 0, k = 0, sbusl;
struct irqaction * action;
#ifdef CONFIG_SMP
int x;
@@ -94,21 +95,21 @@
}
continue;
}
-found_it: len += sprintf(buf+len, "%3d: ", i);
+found_it: seq_printf(p, "%3d: ", i);
#ifndef CONFIG_SMP
- len += sprintf(buf+len, "%10u ", kstat_irqs(i));
+ seq_printf(p, "%10u ", kstat_irqs(i));
#else
for (x = 0; x < smp_num_cpus; x++)
- len += sprintf(buf+len, "%10u ",
+ seq_printf(p, "%10u ",
kstat.irqs[cpu_logical_map(x)][i]);
#endif
- len += sprintf(buf+len, "%c %s",
+ seq_printf(p, "%c %s",
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
action = action->next;
for (;;) {
for (; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
+ seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT) ? " +" : "",
action->name);
}
@@ -123,9 +124,9 @@
action = sbus_actions [(j << 5) + (sbusl << 2)].action;
}
}
- len += sprintf(buf+len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

void sun4d_free_irq(unsigned int irq, void *dev_id)
diff -urN S15-pre9/arch/sparc64/kernel/irq.c S15-pre9-current/arch/sparc64/kernel/irq.c
--- S15-pre9/arch/sparc64/kernel/irq.c Thu Nov 22 03:56:13 2001
+++ S15-pre9-current/arch/sparc64/kernel/irq.c Thu Nov 22 14:15:38 2001
@@ -18,6 +18,7 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/proc_fs.h>
+#include <linux/seq_file.h>

#include <asm/ptrace.h>
#include <asm/processor.h>
@@ -104,9 +105,9 @@
#define put_smpaff_in_irqaction(action, smpaff) (action)->mask = (smpaff)
#define get_smpaff_in_irqaction(action) ((action)->mask)

-int get_irq_list(char *buf)
+int show_interrupts(struct seq_file *p, void *v)
{
- int i, len = 0;
+ int i;
struct irqaction *action;
#ifdef CONFIG_SMP
int j;
@@ -115,23 +116,23 @@
for(i = 0; i < (NR_IRQS + 1); i++) {
if(!(action = *(i + irq_action)))
continue;
- len += sprintf(buf + len, "%3d: ", i);
+ seq_print(p, "%3d: ", i);
#ifndef CONFIG_SMP
- len += sprintf(buf + len, "%10u ", kstat_irqs(i));
+ seq_print(p, "%10u ", kstat_irqs(i));
#else
for (j = 0; j < smp_num_cpus; j++)
- len += sprintf(buf + len, "%10u ",
+ seq_print(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
- len += sprintf(buf + len, " %s:%lx", action->name, \
+ seq_print(p, " %s:%lx", action->name,
get_ino_in_irqaction(action));
for(action = action->next; action; action = action->next) {
- len += sprintf(buf+len, ", %s:%lx", action->name, \
+ seq_print(p, ", %s:%lx", action->name,
get_ino_in_irqaction(action));
}
- len += sprintf(buf + len, "\n");
+ seq_putc(p, '\n');
}
- return len;
+ return 0;
}

/* Now these are always passed a true fully specified sun4u INO. */
diff -urN S15-pre9/fs/proc/proc_misc.c S15-pre9-current/fs/proc/proc_misc.c
--- S15-pre9/fs/proc/proc_misc.c Thu Nov 22 03:56:18 2001
+++ S15-pre9-current/fs/proc/proc_misc.c Thu Nov 22 14:53:51 2001
@@ -57,7 +57,6 @@
extern int get_partition_list(char *, char **, off_t, int);
extern int get_filesystem_list(char *);
extern int get_exec_domain_list(char *);
-extern int get_irq_list(char *);
extern int get_dma_list(char *);
extern int get_locks_status (char *, char **, off_t, int);
extern int get_swaparea_info (char *);
@@ -328,14 +327,53 @@
return len;
}

-#if !defined(CONFIG_ARCH_S390)
-static int interrupts_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+static void *single_start(struct seq_file *p, loff_t *pos)
{
- int len = get_irq_list(page);
- return proc_calc_metrics(page, start, off, count, eof, len);
+ return (void *)(*pos == 0);
}
-#endif
+static void *single_next(struct seq_file *p, void *v, loff_t *pos)
+{
+ ++*pos;
+ return NULL;
+}
+static void single_stop(struct seq_file *p, void *v)
+{
+}
+extern int show_interrupts(struct seq_file *p, void *v);
+static struct seq_operations proc_interrupts_op = {
+ start: single_start,
+ next: single_next,
+ stop: single_stop,
+ show: show_interrupts,
+};
+static int interrupts_open(struct inode *inode, struct file *file)
+{
+ unsigned size = PAGE_SIZE;
+ /*
+ * probably should depend on NR_CPUS, but that's only rough estimate;
+ * if we'll need more it will be given,
+ */
+ char *buf = kmalloc(size, GFP_KERNEL);
+ struct seq_file *m;
+ int res;
+
+ if (!buf)
+ return -ENOMEM;
+ res = seq_open(file, &proc_interrupts_op);
+ if (!res) {
+ m = file->private_data;
+ m->buf = buf;
+ m->size = size;
+ } else
+ kfree(buf);
+ return res;
+}
+static struct file_operations proc_interrupts_operations = {
+ open: interrupts_open,
+ read: seq_read,
+ llseek: seq_lseek,
+ release: seq_release,
+};

static int filesystems_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
@@ -512,9 +550,6 @@
{"stat", kstat_read_proc},
{"devices", devices_read_proc},
{"partitions", partitions_read_proc},
-#if !defined(CONFIG_ARCH_S390)
- {"interrupts", interrupts_read_proc},
-#endif
{"filesystems", filesystems_read_proc},
{"dma", dma_read_proc},
{"ioports", ioports_read_proc},
@@ -537,6 +572,9 @@
entry->proc_fops = &proc_kmsg_operations;
create_seq_entry("mounts", 0, &proc_mounts_operations);
create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
+#if defined(CONFIG_ARCH_S390) || defined(CONFIG_X86) || defined(CONFIG_ARCH_MIPS)
+ create_seq_entry("interrupts", 0, &proc_interrupts_operations);
+#endif
#ifdef CONFIG_MODULES
create_seq_entry("ksyms", 0, &proc_ksyms_operations);
#endif
diff -urN S15-pre9/include/asm-arm/mach/irq.h S15-pre9-current/include/asm-arm/mach/irq.h
--- S15-pre9/include/asm-arm/mach/irq.h Fri Feb 16 22:50:15 2001
+++ S15-pre9-current/include/asm-arm/mach/irq.h Thu Nov 22 12:56:42 2001
@@ -35,7 +35,7 @@

extern void (*init_arch_irq)(void);
extern int setup_arm_irq(int, struct irqaction *);
-extern int get_fiq_list(char *);
+extern int show_fiq_list(struct seq_file *, void *);
extern void init_FIQ(void);

#endif
diff -urN S15-pre9/include/asm-m68k/machdep.h S15-pre9-current/include/asm-m68k/machdep.h
--- S15-pre9/include/asm-m68k/machdep.h Fri Feb 16 20:30:21 2001
+++ S15-pre9-current/include/asm-m68k/machdep.h Thu Nov 22 14:06:23 2001
@@ -1,6 +1,8 @@
#ifndef _M68K_MACHDEP_H
#define _M68K_MACHDEP_H

+#include <linux/seq_file.h>
+
struct pt_regs;
struct kbd_repeat;
struct mktime;
@@ -22,7 +24,7 @@
extern void (*mach_free_irq) (unsigned int irq, void *dev_id);
extern void (*mach_get_model) (char *model);
extern int (*mach_get_hardware_list) (char *buffer);
-extern int (*mach_get_irq_list) (char *buf);
+extern int (*mach_get_irq_list) (struct seq_file *p, void *v);
extern void (*mach_process_int) (int irq, struct pt_regs *fp);
/* machine dependent timer functions */
extern unsigned long (*mach_gettimeoffset)(void);
diff -urN S15-pre9/include/asm-m68k/macintosh.h S15-pre9-current/include/asm-m68k/macintosh.h
--- S15-pre9/include/asm-m68k/macintosh.h Fri Feb 16 07:12:30 2001
+++ S15-pre9-current/include/asm-m68k/macintosh.h Thu Nov 22 11:54:36 2001
@@ -1,6 +1,8 @@
#ifndef __ASM_MACINTOSH_H
#define __ASM_MACINTOSH_H

+#include <linux/seq_file.h>
+
/*
* Apple Macintoshisms
*/
@@ -15,7 +17,7 @@
extern void mac_enable_irq(unsigned int);
extern void mac_disable_irq(unsigned int);
extern int mac_irq_pending(unsigned int);
-extern int mac_get_irq_list(char *);
+extern int show_mac_interrupts(struct seq_file *, void *);
#if 0
extern void mac_default_handler(int irq);
#endif
diff -urN S15-pre9/include/asm-m68k/sun3ints.h S15-pre9-current/include/asm-m68k/sun3ints.h
--- S15-pre9/include/asm-m68k/sun3ints.h Tue Jul 3 21:09:14 2001
+++ S15-pre9-current/include/asm-m68k/sun3ints.h Thu Nov 22 11:42:57 2001
@@ -16,6 +16,7 @@
#include <linux/sched.h>
#include <linux/kernel_stat.h>
#include <linux/interrupt.h>
+#include <linux/seq_file.h>
#include <asm/segment.h>
#include <asm/intersil.h>
#include <asm/oplib.h>
@@ -32,7 +33,7 @@
extern void sun3_free_irq (unsigned int irq, void *dev_id);
extern void sun3_enable_interrupts (void);
extern void sun3_disable_interrupts (void);
-extern int sun3_get_irq_list(char *buf);
+extern int show_sun3_interrupts(struct seq_file *, void *);
extern void sun3_process_int(int, struct pt_regs *);
extern volatile unsigned char* sun3_intreg;

diff -urN S15-pre9/include/linux/seq_file.h S15-pre9-current/include/linux/seq_file.h
--- S15-pre9/include/linux/seq_file.h Thu Nov 22 03:56:20 2001
+++ S15-pre9-current/include/linux/seq_file.h Thu Nov 22 14:38:07 2001
@@ -2,7 +2,11 @@
#define _LINUX_SEQ_FILE_H
#ifdef __KERNEL__

+#include <linux/types.h>
+
struct seq_operations;
+struct file;
+struct inode;

struct seq_file {
char *buf;
@@ -12,6 +16,7 @@
loff_t index;
struct semaphore sem;
struct seq_operations *op;
+ void *private;
};

struct seq_operations {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/