um: delete unnecessary bootmem struct page array
1) uml kernel bootmem managed through bootmem_data->node_bootmem_map, not the struct page array, so the array is unnecessary. 2) the bootmem struct page array has been pointed by a *local* pointer, struct page *map, in init_maps function. The array can be accessed only in init_maps's scope. As a result, uml kernel wastes about 1% of total memory. Signed-off-by: Honggang Li <enjoymindful@gmail.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
671312304e
commit
9e6a57d2cd
|
@ -49,7 +49,7 @@ extern int iomem_size;
|
||||||
extern int init_mem_user(void);
|
extern int init_mem_user(void);
|
||||||
extern void setup_memory(void *entry);
|
extern void setup_memory(void *entry);
|
||||||
extern unsigned long find_iomem(char *driver, unsigned long *len_out);
|
extern unsigned long find_iomem(char *driver, unsigned long *len_out);
|
||||||
extern int init_maps(unsigned long physmem, unsigned long iomem,
|
extern void mem_total_pages(unsigned long physmem, unsigned long iomem,
|
||||||
unsigned long highmem);
|
unsigned long highmem);
|
||||||
extern unsigned long get_vm(unsigned long len);
|
extern unsigned long get_vm(unsigned long len);
|
||||||
extern void setup_physmem(unsigned long start, unsigned long usable,
|
extern void setup_physmem(unsigned long start, unsigned long usable,
|
||||||
|
|
|
@ -22,39 +22,19 @@ EXPORT_SYMBOL(high_physmem);
|
||||||
|
|
||||||
extern unsigned long long physmem_size;
|
extern unsigned long long physmem_size;
|
||||||
|
|
||||||
int __init init_maps(unsigned long physmem, unsigned long iomem,
|
void __init mem_total_pages(unsigned long physmem, unsigned long iomem,
|
||||||
unsigned long highmem)
|
unsigned long highmem)
|
||||||
{
|
{
|
||||||
struct page *p, *map;
|
unsigned long phys_pages, highmem_pages;
|
||||||
unsigned long phys_len, phys_pages, highmem_len, highmem_pages;
|
unsigned long iomem_pages, total_pages;
|
||||||
unsigned long iomem_len, iomem_pages, total_len, total_pages;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
phys_pages = physmem >> PAGE_SHIFT;
|
|
||||||
phys_len = phys_pages * sizeof(struct page);
|
|
||||||
|
|
||||||
iomem_pages = iomem >> PAGE_SHIFT;
|
|
||||||
iomem_len = iomem_pages * sizeof(struct page);
|
|
||||||
|
|
||||||
|
phys_pages = physmem >> PAGE_SHIFT;
|
||||||
|
iomem_pages = iomem >> PAGE_SHIFT;
|
||||||
highmem_pages = highmem >> PAGE_SHIFT;
|
highmem_pages = highmem >> PAGE_SHIFT;
|
||||||
highmem_len = highmem_pages * sizeof(struct page);
|
|
||||||
|
|
||||||
total_pages = phys_pages + iomem_pages + highmem_pages;
|
total_pages = phys_pages + iomem_pages + highmem_pages;
|
||||||
total_len = phys_len + iomem_len + highmem_len;
|
|
||||||
|
|
||||||
map = alloc_bootmem_low_pages(total_len);
|
|
||||||
if (map == NULL)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
for (i = 0; i < total_pages; i++) {
|
|
||||||
p = &map[i];
|
|
||||||
memset(p, 0, sizeof(struct page));
|
|
||||||
SetPageReserved(p);
|
|
||||||
INIT_LIST_HEAD(&p->lru);
|
|
||||||
}
|
|
||||||
|
|
||||||
max_mapnr = total_pages;
|
max_mapnr = total_pages;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
|
void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
|
||||||
|
|
|
@ -348,12 +348,7 @@ int __init linux_main(int argc, char **argv)
|
||||||
start_vm = VMALLOC_START;
|
start_vm = VMALLOC_START;
|
||||||
|
|
||||||
setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
|
setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
|
||||||
if (init_maps(physmem_size, iomem_size, highmem)) {
|
mem_total_pages(physmem_size, iomem_size, highmem);
|
||||||
printf("Failed to allocate mem_map for %Lu bytes of physical "
|
|
||||||
"memory and %Lu bytes of highmem\n", physmem_size,
|
|
||||||
highmem);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtmem_size = physmem_size;
|
virtmem_size = physmem_size;
|
||||||
stack = (unsigned long) argv;
|
stack = (unsigned long) argv;
|
||||||
|
|
Loading…
Reference in New Issue