Commit 8c05319f authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] make irqaction use a cpu mask

From: William Lee Irwin III <wli@holomorphy.com>

The following patch makes irqaction's ->mask a cpumask as it was intended
to be and wraps up the rest of the sweep.  Only struct irqaction is
usefully greppable, so there may be some assignments to ->mask missing
still.  This removes more code than it adds.

From: William Lee Irwin III <wli@holomorphy.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 4320cbbd
...@@ -416,7 +416,7 @@ request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs ...@@ -416,7 +416,7 @@ request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -674,7 +674,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_ ...@@ -674,7 +674,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_
action->handler = handler; action->handler = handler;
action->flags = irq_flags; action->flags = irq_flags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -188,7 +188,7 @@ static struct irqchip clps7500_no_chip = { ...@@ -188,7 +188,7 @@ static struct irqchip clps7500_no_chip = {
.unmask = cl7500_no_action, .unmask = cl7500_no_action,
}; };
static struct irqaction irq_isa = { no_action, 0, 0, "isa", NULL, NULL }; static struct irqaction irq_isa = { no_action, 0, CPU_MASK_NONE, "isa", NULL, NULL };
static void __init clps7500_init_irq(void) static void __init clps7500_init_irq(void)
{ {
......
...@@ -549,7 +549,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_ ...@@ -549,7 +549,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_
action->handler = handler; action->handler = handler;
action->flags = irq_flags; action->flags = irq_flags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -253,7 +253,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -253,7 +253,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
*/ */
static struct irqaction irq2 = { timer_interrupt, SA_SHIRQ | SA_INTERRUPT, static struct irqaction irq2 = { timer_interrupt, SA_SHIRQ | SA_INTERRUPT,
0, "timer", NULL, NULL}; CPU_MASK_NONE, "timer", NULL, NULL};
void __init void __init
time_init(void) time_init(void)
......
...@@ -240,7 +240,7 @@ int request_irq(unsigned int irq, ...@@ -240,7 +240,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -332,7 +332,7 @@ static irqreturn_t math_error_irq(int cpl, void *dev_id, struct pt_regs *regs) ...@@ -332,7 +332,7 @@ static irqreturn_t math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
* New motherboards sometimes make IRQ 13 be a PCI interrupt, * New motherboards sometimes make IRQ 13 be a PCI interrupt,
* so allow interrupt sharing. * so allow interrupt sharing.
*/ */
static struct irqaction fpu_irq = { math_error_irq, 0, 0, "fpu", NULL, NULL }; static struct irqaction fpu_irq = { math_error_irq, 0, CPU_MASK_NONE, "fpu", NULL, NULL };
void __init init_ISA_irqs (void) void __init init_ISA_irqs (void)
{ {
......
...@@ -652,7 +652,7 @@ int request_irq(unsigned int irq, ...@@ -652,7 +652,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -27,7 +27,7 @@ void __init pre_intr_init_hook(void) ...@@ -27,7 +27,7 @@ void __init pre_intr_init_hook(void)
/* /*
* IRQ2 is cascade interrupt to second interrupt controller * IRQ2 is cascade interrupt to second interrupt controller
*/ */
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
/** /**
* intr_init_hook - post gate setup interrupt initialisation * intr_init_hook - post gate setup interrupt initialisation
...@@ -71,7 +71,7 @@ void __init trap_init_hook(void) ...@@ -71,7 +71,7 @@ void __init trap_init_hook(void)
{ {
} }
static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL};
/** /**
* time_init_hook - do any specific initialisations for the system timer. * time_init_hook - do any specific initialisations for the system timer.
......
...@@ -17,7 +17,7 @@ void __init pre_intr_init_hook(void) ...@@ -17,7 +17,7 @@ void __init pre_intr_init_hook(void)
/* /*
* IRQ2 is cascade interrupt to second interrupt controller * IRQ2 is cascade interrupt to second interrupt controller
*/ */
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
void __init intr_init_hook(void) void __init intr_init_hook(void)
{ {
...@@ -40,7 +40,7 @@ void __init trap_init_hook(void) ...@@ -40,7 +40,7 @@ void __init trap_init_hook(void)
{ {
} }
static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL};
void __init time_init_hook(void) void __init time_init_hook(void)
{ {
......
...@@ -607,7 +607,7 @@ int request_irq(unsigned int irq, ...@@ -607,7 +607,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -325,7 +325,7 @@ int request_irq(unsigned int irq, ...@@ -325,7 +325,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
...@@ -389,7 +389,7 @@ static void write_err_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -389,7 +389,7 @@ static void write_err_interrupt(int irq, void *dev_id, struct pt_regs * regs)
} }
static struct irqaction irq0 = static struct irqaction irq0 =
{ write_err_interrupt, SA_INTERRUPT, 0, "bus write error", NULL, NULL}; { write_err_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "bus write error", NULL, NULL};
void __init init_IRQ(void) void __init init_IRQ(void)
{ {
......
...@@ -67,7 +67,7 @@ static void __init timer_enable(void) ...@@ -67,7 +67,7 @@ static void __init timer_enable(void)
} }
static struct irqaction timer_irq = static struct irqaction timer_irq =
{ timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; { timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL};
void __init time_init(void) void __init time_init(void)
{ {
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
extern asmlinkage void ddbIRQ(void); extern asmlinkage void ddbIRQ(void);
static struct irqaction irq_cascade = { no_action, 0, 0, "cascade", NULL, NULL }; static struct irqaction irq_cascade = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL };
#define M1543_PNP_CONFIG 0x03f0 /* PnP Config Port */ #define M1543_PNP_CONFIG 0x03f0 /* PnP Config Port */
#define M1543_PNP_INDEX 0x03f0 /* PnP Index Port */ #define M1543_PNP_INDEX 0x03f0 /* PnP Index Port */
......
...@@ -107,8 +107,8 @@ static void nile4_irq_setup(void) ...@@ -107,8 +107,8 @@ static void nile4_irq_setup(void)
/* memory resource acquire in ddb_setup */ /* memory resource acquire in ddb_setup */
} }
static struct irqaction irq_cascade = { no_action, 0, 0, "cascade", NULL, NULL }; static struct irqaction irq_cascade = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL };
static struct irqaction irq_error = { no_action, 0, 0, "error", NULL, NULL }; static struct irqaction irq_error = { no_action, 0, CPU_MASK_NONE, "error", NULL, NULL };
extern asmlinkage void ddb5476_handle_int(void); extern asmlinkage void ddb5476_handle_int(void);
extern int setup_irq(unsigned int irq, struct irqaction *irqaction); extern int setup_irq(unsigned int irq, struct irqaction *irqaction);
......
...@@ -77,7 +77,7 @@ extern void vrc5477_irq_init(u32 base); ...@@ -77,7 +77,7 @@ extern void vrc5477_irq_init(u32 base);
extern void mips_cpu_irq_init(u32 base); extern void mips_cpu_irq_init(u32 base);
extern asmlinkage void ddb5477_handle_int(void); extern asmlinkage void ddb5477_handle_int(void);
extern int setup_irq(unsigned int irq, struct irqaction *irqaction); extern int setup_irq(unsigned int irq, struct irqaction *irqaction);
static struct irqaction irq_cascade = { no_action, 0, 0, "cascade", NULL, NULL }; static struct irqaction irq_cascade = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL };
void void
ddb5477_irq_setup(void) ddb5477_irq_setup(void)
......
...@@ -80,7 +80,7 @@ void gt64120_time_init(void) ...@@ -80,7 +80,7 @@ void gt64120_time_init(void)
timer.name = "timer"; timer.name = "timer";
timer.dev_id = NULL; timer.dev_id = NULL;
timer.next = NULL; timer.next = NULL;
timer.mask = 0; timer.mask = CPU_MASK_NONE;
irq_desc[GT_TIMER].action = &timer; irq_desc[GT_TIMER].action = &timer;
enable_irq(GT_TIMER); enable_irq(GT_TIMER);
......
...@@ -301,7 +301,7 @@ static void jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -301,7 +301,7 @@ static void jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
} }
static struct irqaction ioc_action = { static struct irqaction ioc_action = {
jmr3927_ioc_interrupt, 0, 0, "IOC", NULL, NULL, jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL,
}; };
static void jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs) static void jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
...@@ -318,7 +318,7 @@ static void jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -318,7 +318,7 @@ static void jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
} }
static struct irqaction isac_action = { static struct irqaction isac_action = {
jmr3927_isac_interrupt, 0, 0, "ISAC", NULL, NULL, jmr3927_isac_interrupt, 0, CPU_MASK_NONE, "ISAC", NULL, NULL,
}; };
...@@ -327,7 +327,7 @@ static void jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * re ...@@ -327,7 +327,7 @@ static void jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * re
printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq); printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq);
} }
static struct irqaction isaerr_action = { static struct irqaction isaerr_action = {
jmr3927_isaerr_interrupt, 0, 0, "ISA error", NULL, NULL, jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL,
}; };
static void jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs) static void jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs)
...@@ -337,7 +337,7 @@ static void jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * re ...@@ -337,7 +337,7 @@ static void jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * re
tx3927_pcicptr->pcistat, tx3927_pcicptr->lbstat); tx3927_pcicptr->pcistat, tx3927_pcicptr->lbstat);
} }
static struct irqaction pcierr_action = { static struct irqaction pcierr_action = {
jmr3927_pcierr_interrupt, 0, 0, "PCI error", NULL, NULL, jmr3927_pcierr_interrupt, 0, CPU_MASK_NONE, "PCI error", NULL, NULL,
}; };
int jmr3927_ether1_irq = 0; int jmr3927_ether1_irq = 0;
......
...@@ -487,7 +487,7 @@ int request_irq(unsigned int irq, ...@@ -487,7 +487,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
extern asmlinkage void jaguar_handle_int(void); extern asmlinkage void jaguar_handle_int(void);
static struct irqaction cascade_mv64340 = { static struct irqaction cascade_mv64340 = {
no_action, SA_INTERRUPT, 0, "MV64340-Cascade", NULL, NULL no_action, SA_INTERRUPT, CPU_MASK_NONE, "MV64340-Cascade", NULL, NULL
}; };
void __init init_IRQ(void) void __init init_IRQ(void)
......
...@@ -53,11 +53,11 @@ extern void uart_irq_init(void); ...@@ -53,11 +53,11 @@ extern void uart_irq_init(void);
extern void cpci_irq_init(void); extern void cpci_irq_init(void);
static struct irqaction cascade_fpga = { static struct irqaction cascade_fpga = {
no_action, SA_INTERRUPT, 0, "cascade via FPGA", NULL, NULL no_action, SA_INTERRUPT, CPU_MASK_NONE, "cascade via FPGA", NULL, NULL
}; };
static struct irqaction cascade_mv64340 = { static struct irqaction cascade_mv64340 = {
no_action, SA_INTERRUPT, 0, "cascade via MV64340", NULL, NULL no_action, SA_INTERRUPT, CPU_MASK_NONE, "cascade via MV64340", NULL, NULL
}; };
void __init init_IRQ(void) void __init init_IRQ(void)
......
...@@ -123,9 +123,9 @@ extern irqreturn_t crime_cpuerr_intr (int irq, void *dev_id, ...@@ -123,9 +123,9 @@ extern irqreturn_t crime_cpuerr_intr (int irq, void *dev_id,
struct pt_regs *regs); struct pt_regs *regs);
struct irqaction memerr_irq = { crime_memerr_intr, SA_INTERRUPT, struct irqaction memerr_irq = { crime_memerr_intr, SA_INTERRUPT,
0, "CRIME memory error", NULL, NULL }; CPU_MASK_NONE, "CRIME memory error", NULL, NULL };
struct irqaction cpuerr_irq = { crime_cpuerr_intr, SA_INTERRUPT, struct irqaction cpuerr_irq = { crime_cpuerr_intr, SA_INTERRUPT,
0, "CRIME CPU error", NULL, NULL }; CPU_MASK_NONE, "CRIME CPU error", NULL, NULL };
extern void ip32_handle_int(void); extern void ip32_handle_int(void);
......
...@@ -279,7 +279,7 @@ static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id, ...@@ -279,7 +279,7 @@ static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id,
static struct irqaction sb1250_dummy_action = { static struct irqaction sb1250_dummy_action = {
.handler = sb1250_dummy_handler, .handler = sb1250_dummy_handler,
.flags = 0, .flags = 0,
.mask = 0, .mask = CPU_MASK_NONE,
.name = "sb1250-private", .name = "sb1250-private",
.next = NULL, .next = NULL,
.dev_id = 0 .dev_id = 0
......
...@@ -172,7 +172,7 @@ static struct hw_interrupt_type tx4927_irq_pic_type = { ...@@ -172,7 +172,7 @@ static struct hw_interrupt_type tx4927_irq_pic_type = {
.set_affinity = NULL .set_affinity = NULL
}; };
#define TX4927_PIC_ACTION(s) { no_action, 0, 0, s, NULL, NULL } #define TX4927_PIC_ACTION(s) { no_action, 0, CPU_MASK_NONE, s, NULL, NULL }
static struct irqaction tx4927_irq_pic_action = static struct irqaction tx4927_irq_pic_action =
TX4927_PIC_ACTION(TX4927_PIC_NAME); TX4927_PIC_ACTION(TX4927_PIC_NAME);
......
...@@ -337,8 +337,8 @@ int toshiba_rbtx4927_irq_nested(int sw_irq) ...@@ -337,8 +337,8 @@ int toshiba_rbtx4927_irq_nested(int sw_irq)
return (sw_irq); return (sw_irq);
} }
//#define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, 0, 0, s, NULL, NULL } //#define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, 0, CPU_MASK_NONE, s, NULL, NULL }
#define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, SA_SHIRQ, 0, s, NULL, NULL } #define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, SA_SHIRQ, CPU_MASK_NONE, s, NULL, NULL }
static struct irqaction toshiba_rbtx4927_irq_ioc_action = static struct irqaction toshiba_rbtx4927_irq_ioc_action =
TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_IOC_NAME); TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_IOC_NAME);
#ifdef CONFIG_TOSHIBA_FPCIB0 #ifdef CONFIG_TOSHIBA_FPCIB0
......
...@@ -180,9 +180,9 @@ extern int setup_irq(unsigned int irq, struct irqaction *irqaction); ...@@ -180,9 +180,9 @@ extern int setup_irq(unsigned int irq, struct irqaction *irqaction);
extern void mips_cpu_irq_init(u32 irq_base); extern void mips_cpu_irq_init(u32 irq_base);
static struct irqaction cascade = static struct irqaction cascade =
{ no_action, SA_INTERRUPT, 0, "cascade", NULL, NULL }; { no_action, SA_INTERRUPT, CPU_MASK_NONE, "cascade", NULL, NULL };
static struct irqaction reserved = static struct irqaction reserved =
{ no_action, SA_INTERRUPT, 0, "cascade", NULL, NULL }; { no_action, SA_INTERRUPT, CPU_MASK_NONE, "cascade", NULL, NULL };
void __init init_IRQ(void) void __init init_IRQ(void)
{ {
......
...@@ -209,7 +209,7 @@ struct vr41xx_giuint_cascade { ...@@ -209,7 +209,7 @@ struct vr41xx_giuint_cascade {
}; };
static struct vr41xx_giuint_cascade giuint_cascade[GIUINT_NR_IRQS]; static struct vr41xx_giuint_cascade giuint_cascade[GIUINT_NR_IRQS];
static struct irqaction giu_cascade = {no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction giu_cascade = {no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
static int no_irq_number(int irq) static int no_irq_number(int irq)
{ {
......
...@@ -288,7 +288,7 @@ static struct hw_interrupt_type giuint_irq_type = { ...@@ -288,7 +288,7 @@ static struct hw_interrupt_type giuint_irq_type = {
/*=======================================================================*/ /*=======================================================================*/
static struct irqaction icu_cascade = {no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction icu_cascade = {no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
static void __init vr41xx_icu_init(void) static void __init vr41xx_icu_init(void)
{ {
......
...@@ -644,7 +644,7 @@ int request_irq(unsigned int irq, ...@@ -644,7 +644,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -241,7 +241,7 @@ int request_irq(unsigned int irq, ...@@ -241,7 +241,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->dev_id = dev_id; action->dev_id = dev_id;
action->next = NULL; action->next = NULL;
......
...@@ -206,7 +206,7 @@ int request_irq(unsigned int irq, ...@@ -206,7 +206,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->dev_id = dev_id; action->dev_id = dev_id;
action->next = NULL; action->next = NULL;
......
...@@ -134,7 +134,7 @@ int hd64461_irq_demux(int irq) ...@@ -134,7 +134,7 @@ int hd64461_irq_demux(int irq)
return __irq_demux(irq); return __irq_demux(irq);
} }
static struct irqaction irq0 = { hd64461_interrupt, SA_INTERRUPT, 0, "HD64461", NULL, NULL }; static struct irqaction irq0 = { hd64461_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "HD64461", NULL, NULL };
int __init setup_hd64461(void) int __init setup_hd64461(void)
{ {
......
...@@ -154,7 +154,7 @@ int hd64465_irq_demux(int irq) ...@@ -154,7 +154,7 @@ int hd64465_irq_demux(int irq)
return irq; return irq;
} }
static struct irqaction irq0 = { hd64465_interrupt, SA_INTERRUPT, 0, "HD64465", NULL, NULL}; static struct irqaction irq0 = { hd64465_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "HD64465", NULL, NULL};
static int __init setup_hd64465(void) static int __init setup_hd64465(void)
......
...@@ -436,7 +436,7 @@ int request_irq(unsigned int irq, ...@@ -436,7 +436,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -391,7 +391,7 @@ static int __init sh_pclk_setup(char *str) ...@@ -391,7 +391,7 @@ static int __init sh_pclk_setup(char *str)
} }
__setup("sh_pclk=", sh_pclk_setup); __setup("sh_pclk=", sh_pclk_setup);
static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL};
void get_current_frequency_divisors(unsigned int *ifc, unsigned int *bfc, unsigned int *pfc) void get_current_frequency_divisors(unsigned int *ifc, unsigned int *bfc, unsigned int *pfc)
{ {
......
...@@ -449,7 +449,7 @@ int request_fast_irq(unsigned int irq, ...@@ -449,7 +449,7 @@ int request_fast_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->dev_id = NULL; action->dev_id = NULL;
action->next = NULL; action->next = NULL;
...@@ -529,7 +529,7 @@ int request_irq(unsigned int irq, ...@@ -529,7 +529,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -336,7 +336,7 @@ int sun4d_request_irq(unsigned int irq, ...@@ -336,7 +336,7 @@ int sun4d_request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -118,10 +118,6 @@ static void register_irq_proc (unsigned int irq); ...@@ -118,10 +118,6 @@ static void register_irq_proc (unsigned int irq);
action->flags |= __irq_ino(irq) << 48; action->flags |= __irq_ino(irq) << 48;
#define get_ino_in_irqaction(action) (action->flags >> 48) #define get_ino_in_irqaction(action) (action->flags >> 48)
#if NR_CPUS > 64
#error irqaction embedded smp affinity does not work with > 64 cpus, FIXME
#endif
#define put_smpaff_in_irqaction(action, smpaff) (action)->mask = (smpaff) #define put_smpaff_in_irqaction(action, smpaff) (action)->mask = (smpaff)
#define get_smpaff_in_irqaction(action) ((action)->mask) #define get_smpaff_in_irqaction(action) ((action)->mask)
...@@ -458,7 +454,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_ ...@@ -458,7 +454,7 @@ int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
put_ino_in_irqaction(action, irq); put_ino_in_irqaction(action, irq);
put_smpaff_in_irqaction(action, 0); put_smpaff_in_irqaction(action, CPU_MASK_NONE);
if (tmp) if (tmp)
tmp->next = action; tmp->next = action;
...@@ -694,7 +690,7 @@ static inline void redirect_intr(int cpu, struct ino_bucket *bp) ...@@ -694,7 +690,7 @@ static inline void redirect_intr(int cpu, struct ino_bucket *bp)
cpumask_t cpu_mask; cpumask_t cpu_mask;
unsigned int buddy, ticks; unsigned int buddy, ticks;
cpus_addr(cpu_mask)[0] = get_smpaff_in_irqaction(ap); cpu_mask = get_smpaff_in_irqaction(ap);
cpus_and(cpu_mask, cpu_mask, cpu_online_map); cpus_and(cpu_mask, cpu_mask, cpu_online_map);
if (cpus_empty(cpu_mask)) if (cpus_empty(cpu_mask))
cpu_mask = cpu_online_map; cpu_mask = cpu_online_map;
...@@ -715,7 +711,7 @@ static inline void redirect_intr(int cpu, struct ino_bucket *bp) ...@@ -715,7 +711,7 @@ static inline void redirect_intr(int cpu, struct ino_bucket *bp)
if (++buddy >= NR_CPUS) if (++buddy >= NR_CPUS)
buddy = 0; buddy = 0;
if (++ticks > NR_CPUS) { if (++ticks > NR_CPUS) {
put_smpaff_in_irqaction(ap, 0); put_smpaff_in_irqaction(ap, CPU_MASK_NONE);
goto out; goto out;
} }
} }
...@@ -949,7 +945,7 @@ int request_fast_irq(unsigned int irq, ...@@ -949,7 +945,7 @@ int request_fast_irq(unsigned int irq,
action->name = name; action->name = name;
action->next = NULL; action->next = NULL;
put_ino_in_irqaction(action, irq); put_ino_in_irqaction(action, irq);
put_smpaff_in_irqaction(action, 0); put_smpaff_in_irqaction(action, CPU_MASK_NONE);
*(bucket->pil + irq_action) = action; *(bucket->pil + irq_action) = action;
enable_irq(irq); enable_irq(irq);
...@@ -1167,45 +1163,6 @@ static struct proc_dir_entry * irq_dir [NUM_IVECS]; ...@@ -1167,45 +1163,6 @@ static struct proc_dir_entry * irq_dir [NUM_IVECS];
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#define HEX_DIGITS 16
static unsigned int parse_hex_value (const char __user *buffer,
unsigned long count, unsigned long *ret)
{
unsigned char hexnum [HEX_DIGITS];
unsigned long value;
int i;
if (!count)
return -EINVAL;
if (count > HEX_DIGITS)
count = HEX_DIGITS;
if (copy_from_user(hexnum, buffer, count))
return -EFAULT;
/*
* Parse the first 8 characters as a hex string, any non-hex char
* is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
*/
value = 0;
for (i = 0; i < count; i++) {
unsigned int c = hexnum[i];
switch (c) {
case '0' ... '9': c -= '0'; break;
case 'a' ... 'f': c -= 'a'-10; break;
case 'A' ... 'F': c -= 'A'-10; break;
default:
goto out;
}
value = (value << 4) | c;
}
out:
*ret = value;
return 0;
}
static int irq_affinity_read_proc (char *page, char **start, off_t off, static int irq_affinity_read_proc (char *page, char **start, off_t off,
int count, int *eof, void *data) int count, int *eof, void *data)
{ {
...@@ -1214,7 +1171,7 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off, ...@@ -1214,7 +1171,7 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off,
cpumask_t mask; cpumask_t mask;
int len; int len;
cpus_addr(mask)[0] = get_smpaff_in_irqaction(ap); mask = get_smpaff_in_irqaction(ap);
if (cpus_empty(mask)) if (cpus_empty(mask))
mask = cpu_online_map; mask = cpu_online_map;
...@@ -1225,7 +1182,7 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off, ...@@ -1225,7 +1182,7 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off,
return len; return len;
} }
static inline void set_intr_affinity(int irq, unsigned long hw_aff) static inline void set_intr_affinity(int irq, cpumask_t hw_aff)
{ {
struct ino_bucket *bp = ivector_table + irq; struct ino_bucket *bp = ivector_table + irq;
...@@ -1243,22 +1200,17 @@ static int irq_affinity_write_proc (struct file *file, const char __user *buffer ...@@ -1243,22 +1200,17 @@ static int irq_affinity_write_proc (struct file *file, const char __user *buffer
unsigned long count, void *data) unsigned long count, void *data)
{ {
int irq = (long) data, full_count = count, err; int irq = (long) data, full_count = count, err;
unsigned long new_value, i; cpumask_t new_value;
err = parse_hex_value(buffer, count, &new_value); err = cpumask_parse(buffer, count, new_value);
/* /*
* Do not allow disabling IRQs completely - it's a too easy * Do not allow disabling IRQs completely - it's a too easy
* way to make the system unusable accidentally :-) At least * way to make the system unusable accidentally :-) At least
* one online CPU still has to be targeted. * one online CPU still has to be targeted.
*/ */
for (i = 0; i < NR_CPUS; i++) { cpus_and(new_value, new_value, cpu_online_map);
if ((new_value & (1UL << i)) != 0 && if (cpus_empty(new_value))
!cpu_online(i))
new_value &= ~(1UL << i);
}
if (!new_value)
return -EINVAL; return -EINVAL;
set_intr_affinity(irq, new_value); set_intr_affinity(irq, new_value);
......
...@@ -414,9 +414,6 @@ static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, c ...@@ -414,9 +414,6 @@ static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, c
* packet, but we have no use for that. However we do take advantage of * packet, but we have no use for that. However we do take advantage of
* the new pipelining feature (ie. dispatch to multiple cpus simultaneously). * the new pipelining feature (ie. dispatch to multiple cpus simultaneously).
*/ */
#if NR_CPUS > 32
#error Fixup cheetah_xcall_deliver Dave...
#endif
static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
{ {
u64 pstate, ver; u64 pstate, ver;
......
...@@ -419,7 +419,7 @@ int request_irq(unsigned int irq, ...@@ -419,7 +419,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -168,5 +168,5 @@ static void make_reg_snap (int irq, void *dummy, struct pt_regs *regs) ...@@ -168,5 +168,5 @@ static void make_reg_snap (int irq, void *dummy, struct pt_regs *regs)
static int reg_snap_dev_id; static int reg_snap_dev_id;
static struct irqaction reg_snap_action = { static struct irqaction reg_snap_action = {
make_reg_snap, 0, 0, "reg_snap", &reg_snap_dev_id, 0 make_reg_snap, 0, CPU_MASK_NONE, "reg_snap", &reg_snap_dev_id, 0
}; };
...@@ -392,7 +392,7 @@ int request_irq(unsigned int irq, ...@@ -392,7 +392,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -203,7 +203,7 @@ static int timer_dev_id; ...@@ -203,7 +203,7 @@ static int timer_dev_id;
static struct irqaction timer_irqaction = { static struct irqaction timer_irqaction = {
timer_interrupt, timer_interrupt,
SA_INTERRUPT, SA_INTERRUPT,
0, CPU_MASK_NONE,
"timer", "timer",
&timer_dev_id, &timer_dev_id,
NULL NULL
......
...@@ -365,7 +365,7 @@ void __init init_8259A(int auto_eoi) ...@@ -365,7 +365,7 @@ void __init init_8259A(int auto_eoi)
* IRQ2 is cascade interrupt to second interrupt controller * IRQ2 is cascade interrupt to second interrupt controller
*/ */
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
void __init init_ISA_irqs (void) void __init init_ISA_irqs (void)
{ {
......
...@@ -488,7 +488,7 @@ int request_irq(unsigned int irq, ...@@ -488,7 +488,7 @@ int request_irq(unsigned int irq,
action->handler = handler; action->handler = handler;
action->flags = irqflags; action->flags = irqflags;
action->mask = 0; cpus_clear(action->mask);
action->name = devname; action->name = devname;
action->next = NULL; action->next = NULL;
action->dev_id = dev_id; action->dev_id = dev_id;
......
...@@ -689,7 +689,7 @@ int __init time_setup(char *str) ...@@ -689,7 +689,7 @@ int __init time_setup(char *str)
} }
static struct irqaction irq0 = { static struct irqaction irq0 = {
timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL
}; };
extern void __init config_acpi_tables(void); extern void __init config_acpi_tables(void);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/preempt.h> #include <linux/preempt.h>
#include <linux/cpumask.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/hardirq.h> #include <asm/hardirq.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
...@@ -35,7 +36,7 @@ typedef int irqreturn_t; ...@@ -35,7 +36,7 @@ typedef int irqreturn_t;
struct irqaction { struct irqaction {
irqreturn_t (*handler)(int, void *, struct pt_regs *); irqreturn_t (*handler)(int, void *, struct pt_regs *);
unsigned long flags; unsigned long flags;
unsigned long mask; cpumask_t mask;
const char *name; const char *name;
void *dev_id; void *dev_id;
struct irqaction *next; struct irqaction *next;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment