dt/flattree: Return virtual address from early_init_dt_alloc_memory_arch()
authorGrant Likely <grant.likely@secretlab.ca>
Thu, 13 Jan 2011 22:36:09 +0000 (15:36 -0700)
committerGrant Likely <grant.likely@secretlab.ca>
Sun, 16 Jan 2011 05:01:58 +0000 (22:01 -0700)
The physical address is never used by the device tree code when
allocating memory for unflattening.  Change the architecture's alloc
hook to return the virutal address instead.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
arch/microblaze/kernel/prom.c
arch/mips/kernel/prom.c
arch/powerpc/kernel/prom.c
drivers/of/fdt.c
include/linux/of_fdt.h

index c881393..bceaa55 100644 (file)
@@ -47,9 +47,9 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
        memblock_add(base, size);
 }
 
-u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
 {
-       return memblock_alloc(size, align);
+       return __va(memblock_alloc(size, align));
 }
 
 #ifdef CONFIG_EARLY_PRINTK
index 9dbe583..a19811e 100644 (file)
@@ -45,11 +45,9 @@ void __init free_mem_mach(unsigned long addr, unsigned long size)
        return free_bootmem(addr, size);
 }
 
-u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
 {
-       return virt_to_phys(
-               __alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
-               );
+       return __alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS));
 }
 
 #ifdef CONFIG_BLK_DEV_INITRD
index 9e3132d..7185f0d 100644 (file)
@@ -519,9 +519,9 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
        memblock_add(base, size);
 }
 
-u64 __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
+void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)
 {
-       return memblock_alloc(size, align);
+       return __va(memblock_alloc(size, align));
 }
 
 #ifdef CONFIG_BLK_DEV_INITRD
index c787c3d..af824e7 100644 (file)
@@ -692,12 +692,6 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
        return 1;
 }
 
-static void *__init early_device_tree_alloc(u64 size, u64 align)
-{
-       unsigned long mem = early_init_dt_alloc_memory_arch(size, align);
-       return __va(mem);
-}
-
 /**
  * unflatten_device_tree - create tree of device_nodes from flat blob
  *
@@ -709,7 +703,7 @@ static void *__init early_device_tree_alloc(u64 size, u64 align)
 void __init unflatten_device_tree(void)
 {
        __unflatten_device_tree(initial_boot_params, &allnodes,
-                               early_device_tree_alloc);
+                               early_init_dt_alloc_memory_arch);
 
        /* Get pointer to OF "/chosen" node for use everywhere */
        of_chosen = of_find_node_by_path("/chosen");
index 0ef22a1..c84d900 100644 (file)
@@ -97,7 +97,7 @@ extern void early_init_dt_check_for_initrd(unsigned long node);
 extern int early_init_dt_scan_memory(unsigned long node, const char *uname,
                                     int depth, void *data);
 extern void early_init_dt_add_memory_arch(u64 base, u64 size);
-extern u64 early_init_dt_alloc_memory_arch(u64 size, u64 align);
+extern void * early_init_dt_alloc_memory_arch(u64 size, u64 align);
 extern u64 dt_mem_next_cell(int s, __be32 **cellp);
 
 /*