Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Tue, 18 Aug 2009 16:54:21 +0100 | From | "Jan Beulich" <> | Subject | [PATCH] don't use alloc_bootmem_low() where not strictly needed |
| |
Since alloc_bootmem() will never return inaccessible (via virtual addressing) memory anyway, using the ..._low() variant only makes sense when the physical address range of the allocated memory must fulfill further constraints, espacially since on 64-bits (or more generally in all cases where the pools the two variants allocate from are different), the space available for ..._low() is more easily exhausted than the full available range.
Probably the use in alloc_tce_table() could also be eliminated (based on code inspection of pci-calgary_64.c), but that seems too risky given I know nothing about that hardware and have no way to test it.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- arch/x86/kernel/e820.c | 2 +- arch/x86/mm/init_32.c | 4 ++-- drivers/firmware/memmap.c | 2 +- kernel/power/snapshot.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-)
--- linux-2.6.31-rc6/arch/x86/kernel/e820.c 2009-08-18 15:31:16.000000000 +0200 +++ 2.6.31-rc6-avoid-alloc_bootmem_low/arch/x86/kernel/e820.c 2009-07-29 12:58:44.000000000 +0200 @@ -1331,7 +1331,7 @@ void __init e820_reserve_resources(void) struct resource *res; u64 end; - res = alloc_bootmem_low(sizeof(struct resource) * e820.nr_map); + res = alloc_bootmem(sizeof(struct resource) * e820.nr_map); e820_res = res; for (i = 0; i < e820.nr_map; i++) { end = e820.map[i].addr + e820.map[i].size - 1; --- linux-2.6.31-rc6/arch/x86/mm/init_32.c 2009-08-18 15:31:16.000000000 +0200 +++ 2.6.31-rc6-avoid-alloc_bootmem_low/arch/x86/mm/init_32.c 2009-07-29 12:58:44.000000000 +0200 @@ -84,7 +84,7 @@ static pmd_t * __init one_md_table_init( #ifdef CONFIG_X86_PAE if (!(pgd_val(*pgd) & _PAGE_PRESENT)) { if (after_bootmem) - pmd_table = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE); + pmd_table = (pmd_t *)alloc_bootmem_pages(PAGE_SIZE); else pmd_table = (pmd_t *)alloc_low_page(); paravirt_alloc_pmd(&init_mm, __pa(pmd_table) >> PAGE_SHIFT); @@ -116,7 +116,7 @@ static pte_t * __init one_page_table_ini #endif if (!page_table) page_table = - (pte_t *)alloc_bootmem_low_pages(PAGE_SIZE); + (pte_t *)alloc_bootmem_pages(PAGE_SIZE); } else page_table = (pte_t *)alloc_low_page(); --- linux-2.6.31-rc6/drivers/firmware/memmap.c 2009-08-18 15:31:18.000000000 +0200 +++ 2.6.31-rc6-avoid-alloc_bootmem_low/drivers/firmware/memmap.c 2009-07-29 12:58:44.000000000 +0200 @@ -164,7 +164,7 @@ int __init firmware_map_add_early(u64 st { struct firmware_map_entry *entry; - entry = alloc_bootmem_low(sizeof(struct firmware_map_entry)); + entry = alloc_bootmem(sizeof(struct firmware_map_entry)); if (WARN_ON(!entry)) return -ENOMEM; --- linux-2.6.31-rc6/kernel/power/snapshot.c 2009-08-18 15:31:56.000000000 +0200 +++ 2.6.31-rc6-avoid-alloc_bootmem_low/kernel/power/snapshot.c 2009-07-29 12:58:44.000000000 +0200 @@ -619,7 +619,7 @@ __register_nosave_region(unsigned long s BUG_ON(!region); } else /* This allocation cannot fail */ - region = alloc_bootmem_low(sizeof(struct nosave_region)); + region = alloc_bootmem(sizeof(struct nosave_region)); region->start_pfn = start_pfn; region->end_pfn = end_pfn; list_add_tail(®ion->list, &nosave_regions);
| ![\](/images/icornerr.gif) |