summaryrefslogtreecommitdiffstats
path: root/kernel/irq
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2008-12-26 11:05:47 +0100
committerIngo Molnar <mingo@elte.hu>2008-12-27 13:24:00 +0100
commit13a0c3c269b223f60abfac8a9811d77111a8b4ba (patch)
treeb57a92eb9eb7c8c1de30bbe29b6a461289e75c62 /kernel/irq
parentsparseirq: fix desc->lock init (diff)
downloadlinux-13a0c3c269b223f60abfac8a9811d77111a8b4ba.tar.xz
linux-13a0c3c269b223f60abfac8a9811d77111a8b4ba.zip
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/irq')
-rw-r--r--kernel/irq/handle.c7
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)
desc->kstat_irqs = (unsigned int *)ptr;
}
-void __attribute__((weak)) arch_init_chip_data(struct irq_desc *desc, int cpu)
+int __weak arch_init_chip_data(struct irq_desc *desc, int cpu)
{
+ return 0;
}
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
/* FIXME: use bootmem alloc ...*/
static unsigned int kstat_irqs_legacy[NR_IRQS_LEGACY][NR_CPUS];
-void __init early_irq_init(void)
+int __init early_irq_init(void)
{
struct irq_desc *desc;
int legacy_count;
@@ -151,7 +152,7 @@ void __init early_irq_init(void)
for (i = legacy_count; i < NR_IRQS; i++)
irq_desc_ptrs[i] = NULL;
- arch_early_irq_init();
+ return arch_early_irq_init();
}
struct irq_desc *irq_to_desc(unsigned int irq)