x86: Make 32bit support NO_BOOTMEM
authorYinghai Lu <yinghai@kernel.org>
Wed, 10 Feb 2010 09:20:28 +0000 (01:20 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 12 Feb 2010 17:42:39 +0000 (09:42 -0800)
Let's make 32bit consistent with 64bit.

-v2: Andrew pointed out for 32bit that we should use -1ULL

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <1265793639-15071-25-git-send-email-yinghai@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/Kconfig
arch/x86/kernel/early_res.c
arch/x86/mm/init_32.c
arch/x86/mm/numa_32.c

index 95439843cebca4b3ded274497a11e43b92dd24de..29f9efb74fc7dc9fc4c9b52cde3624e8d719c4e3 100644 (file)
@@ -571,7 +571,6 @@ config PARAVIRT_DEBUG
 config NO_BOOTMEM
        default y
        bool "Disable Bootmem code"
-       depends on X86_64
        ---help---
          Use early_res directly instead of bootmem before slab is ready.
                - allocator (buddy) [generic]
index dbf08bd0125238faa690b505067d837cbdb7106b..656cdf86a2fa2b7667cbb9ca9a8bc8f7220b394d 100644 (file)
@@ -354,6 +354,9 @@ int __init get_free_all_memory_range(struct range **rangep, int nodeid)
 
        /* need to go over early_node_map to find out good range for node */
        nr_range = add_from_early_node_map(range, count, nr_range, nodeid);
+#ifdef CONFIG_X86_32
+       subtract_range(range, count, max_low_pfn, -1ULL);
+#endif
        subtract_early_res(range, count);
        nr_range = clean_sort_range(range, count);
 
index 2dccde06d22f88c670da90ac25682d46b31a1551..262867a7d43855348c0e1e661a034822fd1c4dc6 100644 (file)
@@ -748,6 +748,7 @@ static void __init zone_sizes_init(void)
        free_area_init_nodes(max_zone_pfns);
 }
 
+#ifndef CONFIG_NO_BOOTMEM
 static unsigned long __init setup_node_bootmem(int nodeid,
                                 unsigned long start_pfn,
                                 unsigned long end_pfn,
@@ -767,9 +768,11 @@ static unsigned long __init setup_node_bootmem(int nodeid,
 
        return bootmap + bootmap_size;
 }
+#endif
 
 void __init setup_bootmem_allocator(void)
 {
+#ifndef CONFIG_NO_BOOTMEM
        int nodeid;
        unsigned long bootmap_size, bootmap;
        /*
@@ -781,11 +784,13 @@ void __init setup_bootmem_allocator(void)
        if (bootmap == -1L)
                panic("Cannot find bootmem map of size %ld\n", bootmap_size);
        reserve_early(bootmap, bootmap + bootmap_size, "BOOTMAP");
+#endif
 
        printk(KERN_INFO "  mapped low ram: 0 - %08lx\n",
                 max_pfn_mapped<<PAGE_SHIFT);
        printk(KERN_INFO "  low ram: 0 - %08lx\n", max_low_pfn<<PAGE_SHIFT);
 
+#ifndef CONFIG_NO_BOOTMEM
        for_each_online_node(nodeid) {
                 unsigned long start_pfn, end_pfn;
 
@@ -803,6 +808,7 @@ void __init setup_bootmem_allocator(void)
                bootmap = setup_node_bootmem(nodeid, start_pfn, end_pfn,
                                                 bootmap);
        }
+#endif
 
        after_bootmem = 1;
 }
index b20760ca724451b3582e089adbd8f16368ebf071..809baaaf48b18d9f24f953b602001a562f2769c7 100644 (file)
@@ -418,7 +418,10 @@ void __init initmem_init(unsigned long start_pfn, unsigned long end_pfn,
 
        for_each_online_node(nid) {
                memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
+               NODE_DATA(nid)->node_id = nid;
+#ifndef CONFIG_NO_BOOTMEM
                NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
+#endif
        }
 
        setup_bootmem_allocator();