Message ID | 1377596268-31552-9-git-send-email-tangchen@cn.fujitsu.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Tuesday, August 27, 2013 05:37:45 PM Tang Chen wrote: > The current acpi_initrd_override() calls memblock_find_in_range() to allocate > memory, and pass 0 to %start, which will not limited by the current_limit_low. > > acpi_initrd_override() > |->memblock_find_in_range(0, ...) > |->memblock_find_in_range_node(0, ...) > > When we want to allocate memory from the end of kernel image to higher memory, > we need to limit the lowest address to the end of kernel image. > > We have modified memblock_alloc_base_nid() to call memblock_find_in_range_node() > with %start = MEMBLOCK_ALLOC_ACCESSIBLE, which means it will be limited by > current_limit_low. And __memblock_alloc_base() calls memblock_alloc_base_nid(). > > __memblock_alloc_base() > |->memblock_alloc_base_nid() > |->memblock_find_in_range_node(MEMBLOCK_ALLOC_ACCESSIBLE, ...) > > So use __memblock_alloc_base() to allocate memory in acpi_initrd_override(). > > Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> > Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Looks OK to me. Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > drivers/acpi/osl.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c > index fece767..1d68fc0 100644 > --- a/drivers/acpi/osl.c > +++ b/drivers/acpi/osl.c > @@ -629,8 +629,8 @@ void __init acpi_initrd_override(void *data, size_t size) > return; > > /* under 4G at first, then above 4G */ > - acpi_tables_addr = memblock_find_in_range(0, (1ULL<<32) - 1, > - all_tables_size, PAGE_SIZE); > + acpi_tables_addr = __memblock_alloc_base(all_tables_size, > + PAGE_SIZE, (1ULL<<32) - 1); > if (!acpi_tables_addr) { > WARN_ON(1); > return; >
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index fece767..1d68fc0 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -629,8 +629,8 @@ void __init acpi_initrd_override(void *data, size_t size) return; /* under 4G at first, then above 4G */ - acpi_tables_addr = memblock_find_in_range(0, (1ULL<<32) - 1, - all_tables_size, PAGE_SIZE); + acpi_tables_addr = __memblock_alloc_base(all_tables_size, + PAGE_SIZE, (1ULL<<32) - 1); if (!acpi_tables_addr) { WARN_ON(1); return;