diff options
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/Kconfig | 4 | ||||
-rw-r--r-- | arch/parisc/kernel/irq.c | 29 | ||||
-rw-r--r-- | arch/parisc/kernel/topology.c | 3 |
3 files changed, 18 insertions, 18 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 910fb3afc0b5..6dd0ea8f88e0 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -51,6 +51,10 @@ config GENERIC_HARDIRQS | |||
51 | config GENERIC_IRQ_PROBE | 51 | config GENERIC_IRQ_PROBE |
52 | def_bool y | 52 | def_bool y |
53 | 53 | ||
54 | config IRQ_PER_CPU | ||
55 | bool | ||
56 | default y | ||
57 | |||
54 | # unless you want to implement ACPI on PA-RISC ... ;-) | 58 | # unless you want to implement ACPI on PA-RISC ... ;-) |
55 | config PM | 59 | config PM |
56 | bool | 60 | bool |
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 197936d9359a..82fe6ba29727 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -94,7 +94,7 @@ int cpu_check_affinity(unsigned int irq, cpumask_t *dest) | |||
94 | if (irq == TIMER_IRQ || irq == IPI_IRQ) { | 94 | if (irq == TIMER_IRQ || irq == IPI_IRQ) { |
95 | /* Bad linux design decision. The mask has already | 95 | /* Bad linux design decision. The mask has already |
96 | * been set; we must reset it */ | 96 | * been set; we must reset it */ |
97 | irq_affinity[irq] = CPU_MASK_ALL; | 97 | irq_desc[irq].affinity = CPU_MASK_ALL; |
98 | return -EINVAL; | 98 | return -EINVAL; |
99 | } | 99 | } |
100 | 100 | ||
@@ -110,7 +110,7 @@ static void cpu_set_affinity_irq(unsigned int irq, cpumask_t dest) | |||
110 | if (cpu_check_affinity(irq, &dest)) | 110 | if (cpu_check_affinity(irq, &dest)) |
111 | return; | 111 | return; |
112 | 112 | ||
113 | irq_affinity[irq] = dest; | 113 | irq_desc[irq].affinity = dest; |
114 | } | 114 | } |
115 | #endif | 115 | #endif |
116 | 116 | ||
@@ -125,6 +125,10 @@ static struct hw_interrupt_type cpu_interrupt_type = { | |||
125 | #ifdef CONFIG_SMP | 125 | #ifdef CONFIG_SMP |
126 | .set_affinity = cpu_set_affinity_irq, | 126 | .set_affinity = cpu_set_affinity_irq, |
127 | #endif | 127 | #endif |
128 | /* XXX: Needs to be written. We managed without it so far, but | ||
129 | * we really ought to write it. | ||
130 | */ | ||
131 | .retrigger = NULL, | ||
128 | }; | 132 | }; |
129 | 133 | ||
130 | int show_interrupts(struct seq_file *p, void *v) | 134 | int show_interrupts(struct seq_file *p, void *v) |
@@ -158,7 +162,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
158 | seq_printf(p, "%10u ", kstat_irqs(i)); | 162 | seq_printf(p, "%10u ", kstat_irqs(i)); |
159 | #endif | 163 | #endif |
160 | 164 | ||
161 | seq_printf(p, " %14s", irq_desc[i].handler->typename); | 165 | seq_printf(p, " %14s", irq_desc[i].chip->typename); |
162 | #ifndef PARISC_IRQ_CR16_COUNTS | 166 | #ifndef PARISC_IRQ_CR16_COUNTS |
163 | seq_printf(p, " %s", action->name); | 167 | seq_printf(p, " %s", action->name); |
164 | 168 | ||
@@ -210,12 +214,12 @@ int cpu_claim_irq(unsigned int irq, struct hw_interrupt_type *type, void *data) | |||
210 | { | 214 | { |
211 | if (irq_desc[irq].action) | 215 | if (irq_desc[irq].action) |
212 | return -EBUSY; | 216 | return -EBUSY; |
213 | if (irq_desc[irq].handler != &cpu_interrupt_type) | 217 | if (irq_desc[irq].chip != &cpu_interrupt_type) |
214 | return -EBUSY; | 218 | return -EBUSY; |
215 | 219 | ||
216 | if (type) { | 220 | if (type) { |
217 | irq_desc[irq].handler = type; | 221 | irq_desc[irq].chip = type; |
218 | irq_desc[irq].handler_data = data; | 222 | irq_desc[irq].chip_data = data; |
219 | cpu_interrupt_type.enable(irq); | 223 | cpu_interrupt_type.enable(irq); |
220 | } | 224 | } |
221 | return 0; | 225 | return 0; |
@@ -265,7 +269,7 @@ int txn_alloc_irq(unsigned int bits_wide) | |||
265 | unsigned long txn_affinity_addr(unsigned int irq, int cpu) | 269 | unsigned long txn_affinity_addr(unsigned int irq, int cpu) |
266 | { | 270 | { |
267 | #ifdef CONFIG_SMP | 271 | #ifdef CONFIG_SMP |
268 | irq_affinity[irq] = cpumask_of_cpu(cpu); | 272 | irq_desc[irq].affinity = cpumask_of_cpu(cpu); |
269 | #endif | 273 | #endif |
270 | 274 | ||
271 | return cpu_data[cpu].txn_addr; | 275 | return cpu_data[cpu].txn_addr; |
@@ -326,7 +330,7 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
326 | /* Work our way from MSb to LSb...same order we alloc EIRs */ | 330 | /* Work our way from MSb to LSb...same order we alloc EIRs */ |
327 | for (irq = TIMER_IRQ; eirr_val && bit; bit>>=1, irq++) { | 331 | for (irq = TIMER_IRQ; eirr_val && bit; bit>>=1, irq++) { |
328 | #ifdef CONFIG_SMP | 332 | #ifdef CONFIG_SMP |
329 | cpumask_t dest = irq_affinity[irq]; | 333 | cpumask_t dest = irq_desc[irq].affinity; |
330 | #endif | 334 | #endif |
331 | if (!(bit & eirr_val)) | 335 | if (!(bit & eirr_val)) |
332 | continue; | 336 | continue; |
@@ -378,7 +382,7 @@ static void claim_cpu_irqs(void) | |||
378 | { | 382 | { |
379 | int i; | 383 | int i; |
380 | for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) { | 384 | for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) { |
381 | irq_desc[i].handler = &cpu_interrupt_type; | 385 | irq_desc[i].chip = &cpu_interrupt_type; |
382 | } | 386 | } |
383 | 387 | ||
384 | irq_desc[TIMER_IRQ].action = &timer_action; | 388 | irq_desc[TIMER_IRQ].action = &timer_action; |
@@ -404,13 +408,6 @@ void __init init_IRQ(void) | |||
404 | 408 | ||
405 | } | 409 | } |
406 | 410 | ||
407 | void hw_resend_irq(struct hw_interrupt_type *type, unsigned int irq) | ||
408 | { | ||
409 | /* XXX: Needs to be written. We managed without it so far, but | ||
410 | * we really ought to write it. | ||
411 | */ | ||
412 | } | ||
413 | |||
414 | void ack_bad_irq(unsigned int irq) | 411 | void ack_bad_irq(unsigned int irq) |
415 | { | 412 | { |
416 | printk("unexpected IRQ %d\n", irq); | 413 | printk("unexpected IRQ %d\n", irq); |
diff --git a/arch/parisc/kernel/topology.c b/arch/parisc/kernel/topology.c index 3ba040050e4c..068b20d822e7 100644 --- a/arch/parisc/kernel/topology.c +++ b/arch/parisc/kernel/topology.c | |||
@@ -26,11 +26,10 @@ static struct cpu cpu_devices[NR_CPUS] __read_mostly; | |||
26 | 26 | ||
27 | static int __init topology_init(void) | 27 | static int __init topology_init(void) |
28 | { | 28 | { |
29 | struct node *parent = NULL; | ||
30 | int num; | 29 | int num; |
31 | 30 | ||
32 | for_each_present_cpu(num) { | 31 | for_each_present_cpu(num) { |
33 | register_cpu(&cpu_devices[num], num, parent); | 32 | register_cpu(&cpu_devices[num], num); |
34 | } | 33 | } |
35 | return 0; | 34 | return 0; |
36 | } | 35 | } |