aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2010-02-10 04:20:28 -0500
committerH. Peter Anvin <hpa@zytor.com>2010-02-12 12:42:39 -0500
commit59be5a8e8ce765cf739ec7f07176219972de7481 (patch)
tree0dead91be8e1ccbbb0514877d4d1c1047cf401f0
parent53db62a2529280ff216c941d8a2650204547e44a (diff)
x86: Make 32bit support NO_BOOTMEM
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>
-rw-r--r--arch/x86/Kconfig1
-rw-r--r--arch/x86/kernel/early_res.c3
-rw-r--r--arch/x86/mm/init_32.c6
-rw-r--r--arch/x86/mm/numa_32.c3
4 files changed, 12 insertions, 1 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 95439843cebc..29f9efb74fc7 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -571,7 +571,6 @@ config PARAVIRT_DEBUG
571config NO_BOOTMEM 571config NO_BOOTMEM
572 default y 572 default y
573 bool "Disable Bootmem code" 573 bool "Disable Bootmem code"
574 depends on X86_64
575 ---help--- 574 ---help---
576 Use early_res directly instead of bootmem before slab is ready. 575 Use early_res directly instead of bootmem before slab is ready.
577 - allocator (buddy) [generic] 576 - allocator (buddy) [generic]
diff --git a/arch/x86/kernel/early_res.c b/arch/x86/kernel/early_res.c
index dbf08bd01252..656cdf86a2fa 100644
--- a/arch/x86/kernel/early_res.c
+++ b/arch/x86/kernel/early_res.c
@@ -354,6 +354,9 @@ int __init get_free_all_memory_range(struct range **rangep, int nodeid)
354 354
355 /* need to go over early_node_map to find out good range for node */ 355 /* need to go over early_node_map to find out good range for node */
356 nr_range = add_from_early_node_map(range, count, nr_range, nodeid); 356 nr_range = add_from_early_node_map(range, count, nr_range, nodeid);
357#ifdef CONFIG_X86_32
358 subtract_range(range, count, max_low_pfn, -1ULL);
359#endif
357 subtract_early_res(range, count); 360 subtract_early_res(range, count);
358 nr_range = clean_sort_range(range, count); 361 nr_range = clean_sort_range(range, count);
359 362
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 2dccde06d22f..262867a7d438 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -748,6 +748,7 @@ static void __init zone_sizes_init(void)
748 free_area_init_nodes(max_zone_pfns); 748 free_area_init_nodes(max_zone_pfns);
749} 749}
750 750
751#ifndef CONFIG_NO_BOOTMEM
751static unsigned long __init setup_node_bootmem(int nodeid, 752static unsigned long __init setup_node_bootmem(int nodeid,
752 unsigned long start_pfn, 753 unsigned long start_pfn,
753 unsigned long end_pfn, 754 unsigned long end_pfn,
@@ -767,9 +768,11 @@ static unsigned long __init setup_node_bootmem(int nodeid,
767 768
768 return bootmap + bootmap_size; 769 return bootmap + bootmap_size;
769} 770}
771#endif
770 772
771void __init setup_bootmem_allocator(void) 773void __init setup_bootmem_allocator(void)
772{ 774{
775#ifndef CONFIG_NO_BOOTMEM
773 int nodeid; 776 int nodeid;
774 unsigned long bootmap_size, bootmap; 777 unsigned long bootmap_size, bootmap;
775 /* 778 /*
@@ -781,11 +784,13 @@ void __init setup_bootmem_allocator(void)
781 if (bootmap == -1L) 784 if (bootmap == -1L)
782 panic("Cannot find bootmem map of size %ld\n", bootmap_size); 785 panic("Cannot find bootmem map of size %ld\n", bootmap_size);
783 reserve_early(bootmap, bootmap + bootmap_size, "BOOTMAP"); 786 reserve_early(bootmap, bootmap + bootmap_size, "BOOTMAP");
787#endif
784 788
785 printk(KERN_INFO " mapped low ram: 0 - %08lx\n", 789 printk(KERN_INFO " mapped low ram: 0 - %08lx\n",
786 max_pfn_mapped<<PAGE_SHIFT); 790 max_pfn_mapped<<PAGE_SHIFT);
787 printk(KERN_INFO " low ram: 0 - %08lx\n", max_low_pfn<<PAGE_SHIFT); 791 printk(KERN_INFO " low ram: 0 - %08lx\n", max_low_pfn<<PAGE_SHIFT);
788 792
793#ifndef CONFIG_NO_BOOTMEM
789 for_each_online_node(nodeid) { 794 for_each_online_node(nodeid) {
790 unsigned long start_pfn, end_pfn; 795 unsigned long start_pfn, end_pfn;
791 796
@@ -803,6 +808,7 @@ void __init setup_bootmem_allocator(void)
803 bootmap = setup_node_bootmem(nodeid, start_pfn, end_pfn, 808 bootmap = setup_node_bootmem(nodeid, start_pfn, end_pfn,
804 bootmap); 809 bootmap);
805 } 810 }
811#endif
806 812
807 after_bootmem = 1; 813 after_bootmem = 1;
808} 814}
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
index b20760ca7244..809baaaf48b1 100644
--- a/arch/x86/mm/numa_32.c
+++ b/arch/x86/mm/numa_32.c
@@ -418,7 +418,10 @@ void __init initmem_init(unsigned long start_pfn, unsigned long end_pfn,
418 418
419 for_each_online_node(nid) { 419 for_each_online_node(nid) {
420 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); 420 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
421 NODE_DATA(nid)->node_id = nid;
422#ifndef CONFIG_NO_BOOTMEM
421 NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; 423 NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
424#endif
422 } 425 }
423 426
424 setup_bootmem_allocator(); 427 setup_bootmem_allocator();