diff options
author | Yinghai Lu <yinghai@kernel.org> | 2008-12-26 05:05:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-27 07:24:00 -0500 |
commit | 13a0c3c269b223f60abfac8a9811d77111a8b4ba (patch) | |
tree | b57a92eb9eb7c8c1de30bbe29b6a461289e75c62 /kernel | |
parent | 793f7b12a0c95e7bfec1badf9628043fb78fd440 (diff) |
sparseirq: work around compiler optimizing away __weak functions
Impact: fix panic on null pointer with sparseirq
Some GCC versions seem to inline the weak global function,
when that function is empty.
Work it around, by making the functions return a (dummy) integer.
Signed-off-by: Yinghai <yinghai@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/handle.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 893da67b7781..0bef3ecb7a0e 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
@@ -86,8 +86,9 @@ void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr) | |||
86 | desc->kstat_irqs = (unsigned int *)ptr; | 86 | desc->kstat_irqs = (unsigned int *)ptr; |
87 | } | 87 | } |
88 | 88 | ||
89 | void __attribute__((weak)) arch_init_chip_data(struct irq_desc *desc, int cpu) | 89 | int __weak arch_init_chip_data(struct irq_desc *desc, int cpu) |
90 | { | 90 | { |
91 | return 0; | ||
91 | } | 92 | } |
92 | 93 | ||
93 | static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu) | 94 | static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu) |
@@ -132,7 +133,7 @@ static struct irq_desc irq_desc_legacy[NR_IRQS_LEGACY] __cacheline_aligned_in_sm | |||
132 | /* FIXME: use bootmem alloc ...*/ | 133 | /* FIXME: use bootmem alloc ...*/ |
133 | static unsigned int kstat_irqs_legacy[NR_IRQS_LEGACY][NR_CPUS]; | 134 | static unsigned int kstat_irqs_legacy[NR_IRQS_LEGACY][NR_CPUS]; |
134 | 135 | ||
135 | void __init early_irq_init(void) | 136 | int __init early_irq_init(void) |
136 | { | 137 | { |
137 | struct irq_desc *desc; | 138 | struct irq_desc *desc; |
138 | int legacy_count; | 139 | int legacy_count; |
@@ -151,7 +152,7 @@ void __init early_irq_init(void) | |||
151 | for (i = legacy_count; i < NR_IRQS; i++) | 152 | for (i = legacy_count; i < NR_IRQS; i++) |
152 | irq_desc_ptrs[i] = NULL; | 153 | irq_desc_ptrs[i] = NULL; |
153 | 154 | ||
154 | arch_early_irq_init(); | 155 | return arch_early_irq_init(); |
155 | } | 156 | } |
156 | 157 | ||
157 | struct irq_desc *irq_to_desc(unsigned int irq) | 158 | struct irq_desc *irq_to_desc(unsigned int irq) |