From: David S. Miller Date: Thu, 14 Feb 2008 03:21:51 +0000 (-0800) Subject: [SPARC64]: Use lmb_alloc() for PROM device tree. X-Git-Tag: v2.6.26-rc1~1089^2~16 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad072004ca35a9918964ca7aee2bf00d79c8657f;p=linux-2.6 [SPARC64]: Use lmb_alloc() for PROM device tree. Signed-off-by: David S. Miller --- diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index 68964ddcde..ed03a18d3b 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c @@ -19,8 +19,8 @@ #include #include #include -#include #include +#include #include #include @@ -122,16 +122,20 @@ int of_find_in_proplist(const char *list, const char *match, int len) } EXPORT_SYMBOL(of_find_in_proplist); -static unsigned int prom_early_allocated; +static unsigned int prom_early_allocated __initdata; static void * __init prom_early_alloc(unsigned long size) { + unsigned long paddr = lmb_alloc(size, SMP_CACHE_BYTES); void *ret; - ret = __alloc_bootmem(size, SMP_CACHE_BYTES, 0UL); - if (ret != NULL) - memset(ret, 0, size); + if (!paddr) { + prom_printf("prom_early_alloc(%lu) failed\n"); + prom_halt(); + } + ret = __va(paddr); + memset(ret, 0, size); prom_early_allocated += size; return ret; diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index 658ec462ed..0abefc8ca4 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c @@ -1214,6 +1214,8 @@ void __init paging_init(void) */ real_setup_per_cpu_areas(); + prom_build_devicetree(); + /* Setup bootmem... */ pages_avail = 0; last_valid_pfn = end_pfn = bootmem_init(&pages_avail, phys_base); @@ -1222,8 +1224,6 @@ void __init paging_init(void) kernel_physical_mapping_init(); - prom_build_devicetree(); - if (tlb_type == hypervisor) sun4v_mdesc_init();