mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
ACPI: use ioremap() in acpi_os_map_memory()
This drops the post-boot use of __acpi_map_table() here again (together with the somewhat awkward locking), in favor of using ioremap(). Signed-off-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
2ee9cbf9d8
commit
c5ba8ed4c6
1 file changed
+11
-5
+11
-5
@@ -38,6 +38,7 @@
|
||||
#include <xen/spinlock.h>
|
||||
#include <xen/domain_page.h>
|
||||
#include <xen/efi.h>
|
||||
#include <xen/vmap.h>
|
||||
|
||||
#define _COMPONENT ACPI_OS_SERVICES
|
||||
ACPI_MODULE_NAME("osl")
|
||||
@@ -83,20 +84,25 @@ acpi_physical_address __init acpi_os_get_root_pointer(void)
|
||||
}
|
||||
}
|
||||
|
||||
static DEFINE_SPINLOCK(map_lock);
|
||||
|
||||
void __iomem *
|
||||
acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
|
||||
{
|
||||
if (system_state >= SYS_STATE_active)
|
||||
spin_lock(&map_lock);
|
||||
if (system_state >= SYS_STATE_active) {
|
||||
unsigned long pfn = PFN_DOWN(phys);
|
||||
unsigned int offs = phys & (PAGE_SIZE - 1);
|
||||
|
||||
/* The low first Mb is always mapped. */
|
||||
if ( !((phys + size - 1) >> 20) )
|
||||
return __va(phys);
|
||||
return __vmap(&pfn, PFN_UP(offs + size), 1, 1, PAGE_HYPERVISOR_NOCACHE) + offs;
|
||||
}
|
||||
return __acpi_map_table(phys, size);
|
||||
}
|
||||
|
||||
void acpi_os_unmap_memory(void __iomem * virt, acpi_size size)
|
||||
{
|
||||
if (system_state >= SYS_STATE_active)
|
||||
spin_unlock(&map_lock);
|
||||
vunmap((void *)((unsigned long)virt & PAGE_MASK));
|
||||
}
|
||||
|
||||
acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
|
||||
|
||||