diff options
author | John Williams <john.williams@petalogix.com> | 2009-07-29 08:08:40 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2009-08-18 04:33:30 -0400 |
commit | 892ee92b81b6e7fa5f6147c96e11c6c1b9802fc6 (patch) | |
tree | 8ae8086fe126192fb4fd68a37811db24599048a3 | |
parent | 6b99ecec25c8fd501e74306f5d23dd0365065e2a (diff) |
microblaze: Sane handling of missing timer/intc in device tree
This code path doesn't test any returned pointers for NULL, leading to a bad
kernel page fault if there's no timer/intc found.
Slightly better is to BUG(), but even better still would be a printk beforehand.
Signed-off-by: John Williams <john.williams@petalogix.com>
Signed-off-by: Michal Simek <monstr@monstr.eu>
-rw-r--r-- | arch/microblaze/kernel/intc.c | 2 | ||||
-rw-r--r-- | arch/microblaze/kernel/timer.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c index b15605299a57..6eea6f92b84e 100644 --- a/arch/microblaze/kernel/intc.c +++ b/arch/microblaze/kernel/intc.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/irq.h> | 12 | #include <linux/irq.h> |
13 | #include <asm/page.h> | 13 | #include <asm/page.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/bug.h> | ||
15 | 16 | ||
16 | #include <asm/prom.h> | 17 | #include <asm/prom.h> |
17 | #include <asm/irq.h> | 18 | #include <asm/irq.h> |
@@ -130,6 +131,7 @@ void __init init_IRQ(void) | |||
130 | if (intc) | 131 | if (intc) |
131 | break; | 132 | break; |
132 | } | 133 | } |
134 | BUG_ON(!intc); | ||
133 | 135 | ||
134 | intc_baseaddr = *(int *) of_get_property(intc, "reg", NULL); | 136 | intc_baseaddr = *(int *) of_get_property(intc, "reg", NULL); |
135 | intc_baseaddr = (unsigned long) ioremap(intc_baseaddr, PAGE_SIZE); | 137 | intc_baseaddr = (unsigned long) ioremap(intc_baseaddr, PAGE_SIZE); |
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c index bdfa2f9f0c81..5499deae7fa6 100644 --- a/arch/microblaze/kernel/timer.c +++ b/arch/microblaze/kernel/timer.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/clocksource.h> | 22 | #include <linux/clocksource.h> |
23 | #include <linux/clockchips.h> | 23 | #include <linux/clockchips.h> |
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | #include <linux/bug.h> | ||
25 | #include <asm/cpuinfo.h> | 26 | #include <asm/cpuinfo.h> |
26 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
27 | #include <asm/prom.h> | 28 | #include <asm/prom.h> |
@@ -234,6 +235,7 @@ void __init time_init(void) | |||
234 | if (timer) | 235 | if (timer) |
235 | break; | 236 | break; |
236 | } | 237 | } |
238 | BUG_ON(!timer); | ||
237 | 239 | ||
238 | timer_baseaddr = *(int *) of_get_property(timer, "reg", NULL); | 240 | timer_baseaddr = *(int *) of_get_property(timer, "reg", NULL); |
239 | timer_baseaddr = (unsigned long) ioremap(timer_baseaddr, PAGE_SIZE); | 241 | timer_baseaddr = (unsigned long) ioremap(timer_baseaddr, PAGE_SIZE); |