acpi: remove final __acpi_map_table mapping before setting acpi_gbl_permanent_mmap

On x86, __acpi_map_table uses early_ioremap() to create the mapping,
replacing the previous mapping with a new one.  Once enough of the
kernel is up an running it switches to using normal ioremap().  At
that point, we need to clean up the final mapping to avoid a warning
from the early_ioremap subsystem.

This can be removed after all the instances in the ACPI code are fixed
that rely on early-ioremap's implicit overmapping of previously
mapped tables.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Acked-by: Len Brown <len.brown@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Jeremy Fitzhardinge 2009-02-07 15:39:40 -08:00 committed by Ingo Molnar
parent eecb9a697f
commit 05876f88ed
2 changed files with 11 additions and 3 deletions

View File

@ -124,12 +124,14 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size)
static char *prev_map;
static unsigned long prev_size;
if (prev_map) {
early_iounmap(prev_map, prev_size);
prev_map = NULL;
}
if (!phys || !size)
return NULL;
if (prev_map)
early_iounmap(prev_map, prev_size);
prev_size = size;
prev_map = early_ioremap(phys, size);

View File

@ -694,6 +694,12 @@ void __init acpi_early_init(void)
if (!acpi_strict)
acpi_gbl_enable_interpreter_slack = TRUE;
/*
* Doing a zero-sized mapping will clear out the previous
* __acpi_map_table() mapping, if any.
*/
__acpi_map_table(0, 0);
acpi_gbl_permanent_mmap = 1;
status = acpi_reallocate_root_table();