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:
Jan Beulich committed 2013-08-21 08:40:22 +02:00
1 parent 2ee9cbf9d8
commit c5ba8ed4c6
1 file changed
+11 -5
+11 -5
View File
@@ -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)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.