x86, numa, 32-bit: increase max_elements to 1024
so every element will represent 64M instead of 256M. AMD opteron could have HW memory hole remapping, so could have [0, 8g + 64M) on node0. Reduce element size to 64M to keep that on node 0 Later we need to use find_e820_area() to allocate memory_node_map like on 64-bit. But need to move memory_present out of populate_mem_map... Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
4c1cbafb88
commit
ba924c81dd
2 changed files with 9 additions and 9 deletions
|
@ -59,14 +59,14 @@ unsigned long node_end_pfn[MAX_NUMNODES] __read_mostly;
|
||||||
/*
|
/*
|
||||||
* 4) physnode_map - the mapping between a pfn and owning node
|
* 4) physnode_map - the mapping between a pfn and owning node
|
||||||
* physnode_map keeps track of the physical memory layout of a generic
|
* physnode_map keeps track of the physical memory layout of a generic
|
||||||
* numa node on a 256Mb break (each element of the array will
|
* numa node on a 64Mb break (each element of the array will
|
||||||
* represent 256Mb of memory and will be marked by the node id. so,
|
* represent 64Mb of memory and will be marked by the node id. so,
|
||||||
* if the first gig is on node 0, and the second gig is on node 1
|
* if the first gig is on node 0, and the second gig is on node 1
|
||||||
* physnode_map will contain:
|
* physnode_map will contain:
|
||||||
*
|
*
|
||||||
* physnode_map[0-3] = 0;
|
* physnode_map[0-15] = 0;
|
||||||
* physnode_map[4-7] = 1;
|
* physnode_map[16-31] = 1;
|
||||||
* physnode_map[8- ] = -1;
|
* physnode_map[32- ] = -1;
|
||||||
*/
|
*/
|
||||||
s8 physnode_map[MAX_ELEMENTS] __read_mostly = { [0 ... (MAX_ELEMENTS - 1)] = -1};
|
s8 physnode_map[MAX_ELEMENTS] __read_mostly = { [0 ... (MAX_ELEMENTS - 1)] = -1};
|
||||||
EXPORT_SYMBOL(physnode_map);
|
EXPORT_SYMBOL(physnode_map);
|
||||||
|
@ -81,9 +81,9 @@ void memory_present(int nid, unsigned long start, unsigned long end)
|
||||||
printk(KERN_DEBUG " ");
|
printk(KERN_DEBUG " ");
|
||||||
for (pfn = start; pfn < end; pfn += PAGES_PER_ELEMENT) {
|
for (pfn = start; pfn < end; pfn += PAGES_PER_ELEMENT) {
|
||||||
physnode_map[pfn / PAGES_PER_ELEMENT] = nid;
|
physnode_map[pfn / PAGES_PER_ELEMENT] = nid;
|
||||||
printk("%ld ", pfn);
|
printk(KERN_CONT "%ld ", pfn);
|
||||||
}
|
}
|
||||||
printk("\n");
|
printk(KERN_CONT "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long node_memmap_size_bytes(int nid, unsigned long start_pfn,
|
unsigned long node_memmap_size_bytes(int nid, unsigned long start_pfn,
|
||||||
|
|
|
@ -51,14 +51,14 @@ extern int early_pfn_to_nid(unsigned long pfn);
|
||||||
/*
|
/*
|
||||||
* generic node memory support, the following assumptions apply:
|
* generic node memory support, the following assumptions apply:
|
||||||
*
|
*
|
||||||
* 1) memory comes in 256Mb contigious chunks which are either present or not
|
* 1) memory comes in 64Mb contigious chunks which are either present or not
|
||||||
* 2) we will not have more than 64Gb in total
|
* 2) we will not have more than 64Gb in total
|
||||||
*
|
*
|
||||||
* for now assume that 64Gb is max amount of RAM for whole system
|
* for now assume that 64Gb is max amount of RAM for whole system
|
||||||
* 64Gb / 4096bytes/page = 16777216 pages
|
* 64Gb / 4096bytes/page = 16777216 pages
|
||||||
*/
|
*/
|
||||||
#define MAX_NR_PAGES 16777216
|
#define MAX_NR_PAGES 16777216
|
||||||
#define MAX_ELEMENTS 256
|
#define MAX_ELEMENTS 1024
|
||||||
#define PAGES_PER_ELEMENT (MAX_NR_PAGES/MAX_ELEMENTS)
|
#define PAGES_PER_ELEMENT (MAX_NR_PAGES/MAX_ELEMENTS)
|
||||||
|
|
||||||
extern s8 physnode_map[];
|
extern s8 physnode_map[];
|
||||||
|
|
Reference in a new issue