diff options
author | Michal Simek <monstr@monstr.eu> | 2012-01-10 12:15:58 +0100 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2012-01-11 09:20:55 +0100 |
commit | d761f0c521868e59cd0bc59159cbdb4686fe210d (patch) | |
tree | b76736a73f86a5c0d745cc4c6ca1ae59a4394df8 /arch/microblaze/kernel/setup.c | |
parent | e343a895a9f342f239c5e3c5ffc6c0b1707e6244 (diff) |
microblaze: Add topology init
Init topology subsystem by cpu registration.
Microblaze Linux kernel is fauling by
"Oops: kernel access of bad area, sig: 11"
because cpu is not initialized.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze/kernel/setup.c')
-rw-r--r-- | arch/microblaze/kernel/setup.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index 604cd9dd1333..d4fc1a971779 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c @@ -26,6 +26,7 @@ #include <linux/cache.h> #include <linux/of_platform.h> #include <linux/dma-mapping.h> +#include <linux/cpu.h> #include <asm/cacheflush.h> #include <asm/entry.h> #include <asm/cpuinfo.h> @@ -226,5 +227,23 @@ static int __init setup_bus_notifier(void) return 0; } - arch_initcall(setup_bus_notifier); + +static DEFINE_PER_CPU(struct cpu, cpu_devices); + +static int __init topology_init(void) +{ + int i, ret; + + for_each_present_cpu(i) { + struct cpu *c = &per_cpu(cpu_devices, i); + + ret = register_cpu(c, i); + if (ret) + printk(KERN_WARNING "topology_init: register_cpu %d " + "failed (%d)\n", i, ret); + } + + return 0; +} +subsys_initcall(topology_init); |