Skip to content

Commit

Permalink
x86-32, numa: Calculate remap size in common code
Browse files Browse the repository at this point in the history
Only pgdat and memmap use remap area and there isn't much benefit in
allowing per-node override.  In addition, the use of node_remap_size[]
is confusing in that it contains number of bytes before remap
initialization and then number of pages afterwards.

Move remap size calculation for memap from specific NUMA config
implementations to init_alloc_remap() and make node_remap_size[]
static.

The only behavior difference is that, before this patch, numaq_32
didn't consider max_pfn when calculating the memmap size but it's
enforced after this patch, which is the right thing to do.

Signed-off-by: Tejun Heo <tj@kernel.org>
Link: http://lkml.kernel.org/r/1301955840-7246-8-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>
  • Loading branch information
Tejun Heo authored and H. Peter Anvin committed Apr 7, 2011
1 parent af7c1a6 commit 7210cf9
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 12 deletions.
1 change: 0 additions & 1 deletion arch/x86/include/asm/topology.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ extern void setup_node_to_cpumask_map(void);
#ifdef CONFIG_X86_32
extern unsigned long node_start_pfn[];
extern unsigned long node_end_pfn[];
extern unsigned long node_remap_size[];
#define node_has_online_mem(nid) (node_start_pfn[nid] != node_end_pfn[nid])

# define SD_CACHE_NICE_TRIES 1
Expand Down
4 changes: 0 additions & 4 deletions arch/x86/kernel/apic/numaq_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,6 @@ static inline void numaq_register_node(int node, struct sys_cfg_data *scd)
node_end_pfn[node]);

memory_present(node, node_start_pfn[node], node_end_pfn[node]);

node_remap_size[node] = node_memmap_size_bytes(node,
node_start_pfn[node],
node_end_pfn[node]);
}

/*
Expand Down
10 changes: 4 additions & 6 deletions arch/x86/mm/numa_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ extern unsigned long highend_pfn, highstart_pfn;

#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE)

unsigned long node_remap_size[MAX_NUMNODES];
static unsigned long node_remap_size[MAX_NUMNODES];
static void *node_remap_start_vaddr[MAX_NUMNODES];
void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags);

Expand All @@ -129,7 +129,6 @@ int __init get_memcfg_numa_flat(void)
node_end_pfn[0] = max_pfn;
memblock_x86_register_active_regions(0, 0, max_pfn);
memory_present(0, 0, max_pfn);
node_remap_size[0] = node_memmap_size_bytes(0, 0, max_pfn);

/* Indicate there is one node available. */
nodes_clear(node_online_map);
Expand Down Expand Up @@ -282,11 +281,10 @@ static __init unsigned long init_alloc_remap(int nid, unsigned long offset)
if (node_end_pfn[nid] > max_pfn)
node_end_pfn[nid] = max_pfn;

/* ensure the remap includes space for the pgdat. */
size = node_remap_size[nid];
/* calculate the necessary space aligned to large page size */
size = node_memmap_size_bytes(nid, node_start_pfn[nid],
min(node_end_pfn[nid], max_pfn));
size += ALIGN(sizeof(pg_data_t), PAGE_SIZE);

/* align to large page */
size = ALIGN(size, LARGE_PAGE_BYTES);

node_pa = memblock_find_in_range(node_start_pfn[nid] << PAGE_SHIFT,
Expand Down
1 change: 0 additions & 1 deletion arch/x86/mm/srat_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,6 @@ int __init get_memcfg_from_srat(void)
unsigned long end = min(node_end_pfn[nid], max_pfn);

memory_present(nid, start, end);
node_remap_size[nid] = node_memmap_size_bytes(nid, start, end);
}
return 1;
out_fail:
Expand Down

0 comments on commit 7210cf9

Please sign in to comment.