diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-05-21 12:26:16 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-05-21 12:26:16 -0400 |
commit | fa1d43ab451084785153d37ae559c4fdd1546a5b (patch) | |
tree | 31a90b3c61dcd1b8c71ca710fe419c634fe64883 | |
parent | 55620c86ebc29013c0d26c5b3bc423faea299fee (diff) |
sh: irq: Convert from irq_desc[] to irq_to_desc().
This converts a few places that were using the old irq_desc[] array over
to the shiny new irq_to_desc() helper. Preperatory work for sparse irq
support.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/cpu/irq/intc-sh5.c | 10 | ||||
-rw-r--r-- | arch/sh/kernel/irq.c | 69 | ||||
-rw-r--r-- | arch/sh/kernel/sh_ksyms_32.c | 8 |
3 files changed, 48 insertions, 39 deletions
diff --git a/arch/sh/kernel/cpu/irq/intc-sh5.c b/arch/sh/kernel/cpu/irq/intc-sh5.c index a619eaf6e6b4..6c092f1f5557 100644 --- a/arch/sh/kernel/cpu/irq/intc-sh5.c +++ b/arch/sh/kernel/cpu/irq/intc-sh5.c | |||
@@ -152,14 +152,6 @@ static void end_intc_irq(unsigned int irq) | |||
152 | enable_intc_irq(irq); | 152 | enable_intc_irq(irq); |
153 | } | 153 | } |
154 | 154 | ||
155 | /* For future use, if we ever support IRLM=0) */ | ||
156 | void make_intc_irq(unsigned int irq) | ||
157 | { | ||
158 | disable_irq_nosync(irq); | ||
159 | irq_desc[irq].chip = &intc_irq_type; | ||
160 | disable_intc_irq(irq); | ||
161 | } | ||
162 | |||
163 | void __init plat_irq_setup(void) | 155 | void __init plat_irq_setup(void) |
164 | { | 156 | { |
165 | unsigned long long __dummy0, __dummy1=~0x00000000100000f0; | 157 | unsigned long long __dummy0, __dummy1=~0x00000000100000f0; |
@@ -174,7 +166,7 @@ void __init plat_irq_setup(void) | |||
174 | 166 | ||
175 | /* Set default: per-line enable/disable, priority driven ack/eoi */ | 167 | /* Set default: per-line enable/disable, priority driven ack/eoi */ |
176 | for (i = 0; i < NR_INTC_IRQS; i++) | 168 | for (i = 0; i < NR_INTC_IRQS; i++) |
177 | irq_desc[i].chip = &intc_irq_type; | 169 | set_irq_chip_and_handler(i, &intc_irq_type, handle_level_irq); |
178 | 170 | ||
179 | 171 | ||
180 | /* Disable all interrupts and set all priorities to 0 to avoid trouble */ | 172 | /* Disable all interrupts and set all priorities to 0 to avoid trouble */ |
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 3f1372eb0091..878532b61762 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
@@ -31,39 +31,64 @@ void ack_bad_irq(unsigned int irq) | |||
31 | } | 31 | } |
32 | 32 | ||
33 | #if defined(CONFIG_PROC_FS) | 33 | #if defined(CONFIG_PROC_FS) |
34 | /* | ||
35 | * /proc/interrupts printing: | ||
36 | */ | ||
37 | static int show_other_interrupts(struct seq_file *p, int prec) | ||
38 | { | ||
39 | seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); | ||
40 | return 0; | ||
41 | } | ||
42 | |||
34 | int show_interrupts(struct seq_file *p, void *v) | 43 | int show_interrupts(struct seq_file *p, void *v) |
35 | { | 44 | { |
36 | int i = *(loff_t *) v, j; | 45 | unsigned long flags, any_count = 0; |
37 | struct irqaction * action; | 46 | int i = *(loff_t *)v, j, prec; |
38 | unsigned long flags; | 47 | struct irqaction *action; |
48 | struct irq_desc *desc; | ||
49 | |||
50 | if (i > nr_irqs) | ||
51 | return 0; | ||
52 | |||
53 | for (prec = 3, j = 1000; prec < 10 && j <= nr_irqs; ++prec) | ||
54 | j *= 10; | ||
55 | |||
56 | if (i == nr_irqs) | ||
57 | return show_other_interrupts(p, prec); | ||
39 | 58 | ||
40 | if (i == 0) { | 59 | if (i == 0) { |
41 | seq_puts(p, " "); | 60 | seq_printf(p, "%*s", prec + 8, ""); |
42 | for_each_online_cpu(j) | 61 | for_each_online_cpu(j) |
43 | seq_printf(p, "CPU%d ",j); | 62 | seq_printf(p, "CPU%-8d", j); |
44 | seq_putc(p, '\n'); | 63 | seq_putc(p, '\n'); |
45 | } | 64 | } |
46 | 65 | ||
47 | if (i < sh_mv.mv_nr_irqs) { | 66 | desc = irq_to_desc(i); |
48 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 67 | if (!desc) |
49 | action = irq_desc[i].action; | 68 | return 0; |
50 | if (!action) | 69 | |
51 | goto unlock; | 70 | spin_lock_irqsave(&desc->lock, flags); |
52 | seq_printf(p, "%3d: ",i); | 71 | for_each_online_cpu(j) |
53 | for_each_online_cpu(j) | 72 | any_count |= kstat_irqs_cpu(i, j); |
54 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); | 73 | action = desc->action; |
55 | seq_printf(p, " %14s", irq_desc[i].chip->name); | 74 | if (!action && !any_count) |
56 | seq_printf(p, "-%-8s", irq_desc[i].name); | 75 | goto out; |
57 | seq_printf(p, " %s", action->name); | ||
58 | 76 | ||
59 | for (action=action->next; action; action = action->next) | 77 | seq_printf(p, "%*d: ", prec, i); |
78 | for_each_online_cpu(j) | ||
79 | seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); | ||
80 | seq_printf(p, " %14s", desc->chip->name); | ||
81 | seq_printf(p, "-%-8s", desc->name); | ||
82 | |||
83 | if (action) { | ||
84 | seq_printf(p, " %s", action->name); | ||
85 | while ((action = action->next) != NULL) | ||
60 | seq_printf(p, ", %s", action->name); | 86 | seq_printf(p, ", %s", action->name); |
61 | seq_putc(p, '\n'); | 87 | } |
62 | unlock: | ||
63 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | ||
64 | } else if (i == sh_mv.mv_nr_irqs) | ||
65 | seq_printf(p, "Err: %10u\n", atomic_read(&irq_err_count)); | ||
66 | 88 | ||
89 | seq_putc(p, '\n'); | ||
90 | out: | ||
91 | spin_unlock_irqrestore(&desc->lock, flags); | ||
67 | return 0; | 92 | return 0; |
68 | } | 93 | } |
69 | #endif | 94 | #endif |
diff --git a/arch/sh/kernel/sh_ksyms_32.c b/arch/sh/kernel/sh_ksyms_32.c index 2d868c60aa6e..fcc5de31f83b 100644 --- a/arch/sh/kernel/sh_ksyms_32.c +++ b/arch/sh/kernel/sh_ksyms_32.c | |||
@@ -23,9 +23,6 @@ extern int dump_fpu(struct pt_regs *, elf_fpregset_t *); | |||
23 | /* platform dependent support */ | 23 | /* platform dependent support */ |
24 | EXPORT_SYMBOL(dump_fpu); | 24 | EXPORT_SYMBOL(dump_fpu); |
25 | EXPORT_SYMBOL(kernel_thread); | 25 | EXPORT_SYMBOL(kernel_thread); |
26 | EXPORT_SYMBOL(irq_desc); | ||
27 | EXPORT_SYMBOL(no_irq_chip); | ||
28 | |||
29 | EXPORT_SYMBOL(strlen); | 26 | EXPORT_SYMBOL(strlen); |
30 | 27 | ||
31 | /* PCI exports */ | 28 | /* PCI exports */ |
@@ -40,11 +37,6 @@ EXPORT_SYMBOL(memcpy); | |||
40 | EXPORT_SYMBOL(memset); | 37 | EXPORT_SYMBOL(memset); |
41 | EXPORT_SYMBOL(memmove); | 38 | EXPORT_SYMBOL(memmove); |
42 | EXPORT_SYMBOL(__copy_user); | 39 | EXPORT_SYMBOL(__copy_user); |
43 | |||
44 | #ifdef CONFIG_MMU | ||
45 | EXPORT_SYMBOL(get_vm_area); | ||
46 | #endif | ||
47 | |||
48 | EXPORT_SYMBOL(__udelay); | 40 | EXPORT_SYMBOL(__udelay); |
49 | EXPORT_SYMBOL(__ndelay); | 41 | EXPORT_SYMBOL(__ndelay); |
50 | EXPORT_SYMBOL(__const_udelay); | 42 | EXPORT_SYMBOL(__const_udelay); |