aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2011-04-04 18:23:57 -0400
committerH. Peter Anvin <hpa@zytor.com>2011-04-06 20:57:39 -0400
commitb2e3e4fa3eee752b893687783f2a427106c93423 (patch)
tree205521a924fe99e0360a0b53620a93b8ce706222 /arch/x86/mm
parent2a286344f06d6341740b284494379373e87648f7 (diff)
x86-32, numa: Make pgdat allocation use alloc_remap()
pgdat allocation is handled differnetly from other remap allocations - it's reserved during initialization. There's no reason to handle this any differnetly. Remap allocator is initialized for every node and if init failed the allocation will fail and pgdat allocation can fall back to generic code like anyone else. Remove special init-time pgdat reservation and make allocate_pgdat() use alloc_remap() like everyone else. Signed-off-by: Tejun Heo <tj@kernel.org> Link: http://lkml.kernel.org/r/1301955840-7246-12-git-send-email-tj@kernel.org Acked-by: Yinghai Lu <yinghai@kernel.org> Cc: David Rientjes <rientjes@google.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/mm')
-rw-r--r--arch/x86/mm/numa_32.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
index 53ec13a17b9..0184a9f5a34 100644
--- a/arch/x86/mm/numa_32.c
+++ b/arch/x86/mm/numa_32.c
@@ -160,9 +160,8 @@ static void __init allocate_pgdat(int nid)
160{ 160{
161 char buf[16]; 161 char buf[16];
162 162
163 if (node_has_online_mem(nid) && node_remap_start_vaddr[nid]) 163 NODE_DATA(nid) = alloc_remap(nid, ALIGN(sizeof(pg_data_t), PAGE_SIZE));
164 NODE_DATA(nid) = (pg_data_t *)node_remap_start_vaddr[nid]; 164 if (!NODE_DATA(nid)) {
165 else {
166 unsigned long pgdat_phys; 165 unsigned long pgdat_phys;
167 pgdat_phys = memblock_find_in_range(min_low_pfn<<PAGE_SHIFT, 166 pgdat_phys = memblock_find_in_range(min_low_pfn<<PAGE_SHIFT,
168 max_pfn_mapped<<PAGE_SHIFT, 167 max_pfn_mapped<<PAGE_SHIFT,
@@ -301,7 +300,7 @@ static __init unsigned long init_alloc_remap(int nid, unsigned long offset)
301 300
302 node_remap_start_vaddr[nid] = remap_va; 301 node_remap_start_vaddr[nid] = remap_va;
303 node_remap_end_vaddr[nid] = remap_va + size; 302 node_remap_end_vaddr[nid] = remap_va + size;
304 node_remap_alloc_vaddr[nid] = remap_va + ALIGN(sizeof(pg_data_t), PAGE_SIZE); 303 node_remap_alloc_vaddr[nid] = remap_va;
305 304
306 printk(KERN_DEBUG "remap_alloc: node %d [%08llx-%08llx) -> [%p-%p)\n", 305 printk(KERN_DEBUG "remap_alloc: node %d [%08llx-%08llx) -> [%p-%p)\n",
307 nid, node_pa, node_pa + size, remap_va, remap_va + size); 306 nid, node_pa, node_pa + size, remap_va, remap_va + size);