Commit ea1f9163 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'acpi-5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fix from Rafael Wysocki:
 "Revert a recent commit related to memory management that turned out to
  be problematic (Jia He)"

* tag 'acpi-5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  Revert "ACPI: Add memory semantics to acpi_os_map_memory()"
parents 1b7eaf57 12064c17
...@@ -50,9 +50,6 @@ pgprot_t __acpi_get_mem_attribute(phys_addr_t addr); ...@@ -50,9 +50,6 @@ pgprot_t __acpi_get_mem_attribute(phys_addr_t addr);
void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size); void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size);
#define acpi_os_ioremap acpi_os_ioremap #define acpi_os_ioremap acpi_os_ioremap
void __iomem *acpi_os_memmap(acpi_physical_address phys, acpi_size size);
#define acpi_os_memmap acpi_os_memmap
typedef u64 phys_cpuid_t; typedef u64 phys_cpuid_t;
#define PHYS_CPUID_INVALID INVALID_HWID #define PHYS_CPUID_INVALID INVALID_HWID
......
...@@ -273,8 +273,7 @@ pgprot_t __acpi_get_mem_attribute(phys_addr_t addr) ...@@ -273,8 +273,7 @@ pgprot_t __acpi_get_mem_attribute(phys_addr_t addr)
return __pgprot(PROT_DEVICE_nGnRnE); return __pgprot(PROT_DEVICE_nGnRnE);
} }
static void __iomem *__acpi_os_ioremap(acpi_physical_address phys, void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size)
acpi_size size, bool memory)
{ {
efi_memory_desc_t *md, *region = NULL; efi_memory_desc_t *md, *region = NULL;
pgprot_t prot; pgprot_t prot;
...@@ -300,11 +299,9 @@ static void __iomem *__acpi_os_ioremap(acpi_physical_address phys, ...@@ -300,11 +299,9 @@ static void __iomem *__acpi_os_ioremap(acpi_physical_address phys,
* It is fine for AML to remap regions that are not represented in the * It is fine for AML to remap regions that are not represented in the
* EFI memory map at all, as it only describes normal memory, and MMIO * EFI memory map at all, as it only describes normal memory, and MMIO
* regions that require a virtual mapping to make them accessible to * regions that require a virtual mapping to make them accessible to
* the EFI runtime services. Determine the region default * the EFI runtime services.
* attributes by checking the requested memory semantics.
*/ */
prot = memory ? __pgprot(PROT_NORMAL_NC) : prot = __pgprot(PROT_DEVICE_nGnRnE);
__pgprot(PROT_DEVICE_nGnRnE);
if (region) { if (region) {
switch (region->type) { switch (region->type) {
case EFI_LOADER_CODE: case EFI_LOADER_CODE:
...@@ -364,16 +361,6 @@ static void __iomem *__acpi_os_ioremap(acpi_physical_address phys, ...@@ -364,16 +361,6 @@ static void __iomem *__acpi_os_ioremap(acpi_physical_address phys,
return __ioremap(phys, size, prot); return __ioremap(phys, size, prot);
} }
void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size)
{
return __acpi_os_ioremap(phys, size, false);
}
void __iomem *acpi_os_memmap(acpi_physical_address phys, acpi_size size)
{
return __acpi_os_ioremap(phys, size, true);
}
/* /*
* Claim Synchronous External Aborts as a firmware first notification. * Claim Synchronous External Aborts as a firmware first notification.
* *
......
...@@ -284,8 +284,7 @@ acpi_map_lookup_virt(void __iomem *virt, acpi_size size) ...@@ -284,8 +284,7 @@ acpi_map_lookup_virt(void __iomem *virt, acpi_size size)
#define should_use_kmap(pfn) page_is_ram(pfn) #define should_use_kmap(pfn) page_is_ram(pfn)
#endif #endif
static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz, static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz)
bool memory)
{ {
unsigned long pfn; unsigned long pfn;
...@@ -295,8 +294,7 @@ static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz, ...@@ -295,8 +294,7 @@ static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz,
return NULL; return NULL;
return (void __iomem __force *)kmap(pfn_to_page(pfn)); return (void __iomem __force *)kmap(pfn_to_page(pfn));
} else } else
return memory ? acpi_os_memmap(pg_off, pg_sz) : return acpi_os_ioremap(pg_off, pg_sz);
acpi_os_ioremap(pg_off, pg_sz);
} }
static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr) static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr)
...@@ -311,10 +309,9 @@ static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr) ...@@ -311,10 +309,9 @@ static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr)
} }
/** /**
* __acpi_os_map_iomem - Get a virtual address for a given physical address range. * acpi_os_map_iomem - Get a virtual address for a given physical address range.
* @phys: Start of the physical address range to map. * @phys: Start of the physical address range to map.
* @size: Size of the physical address range to map. * @size: Size of the physical address range to map.
* @memory: true if remapping memory, false if IO
* *
* Look up the given physical address range in the list of existing ACPI memory * Look up the given physical address range in the list of existing ACPI memory
* mappings. If found, get a reference to it and return a pointer to it (its * mappings. If found, get a reference to it and return a pointer to it (its
...@@ -324,8 +321,8 @@ static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr) ...@@ -324,8 +321,8 @@ static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr)
* During early init (when acpi_permanent_mmap has not been set yet) this * During early init (when acpi_permanent_mmap has not been set yet) this
* routine simply calls __acpi_map_table() to get the job done. * routine simply calls __acpi_map_table() to get the job done.
*/ */
static void __iomem __ref void __iomem __ref
*__acpi_os_map_iomem(acpi_physical_address phys, acpi_size size, bool memory) *acpi_os_map_iomem(acpi_physical_address phys, acpi_size size)
{ {
struct acpi_ioremap *map; struct acpi_ioremap *map;
void __iomem *virt; void __iomem *virt;
...@@ -356,7 +353,7 @@ static void __iomem __ref ...@@ -356,7 +353,7 @@ static void __iomem __ref
pg_off = round_down(phys, PAGE_SIZE); pg_off = round_down(phys, PAGE_SIZE);
pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off; pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off;
virt = acpi_map(phys, size, memory); virt = acpi_map(phys, size);
if (!virt) { if (!virt) {
mutex_unlock(&acpi_ioremap_lock); mutex_unlock(&acpi_ioremap_lock);
kfree(map); kfree(map);
...@@ -375,17 +372,11 @@ static void __iomem __ref ...@@ -375,17 +372,11 @@ static void __iomem __ref
mutex_unlock(&acpi_ioremap_lock); mutex_unlock(&acpi_ioremap_lock);
return map->virt + (phys - map->phys); return map->virt + (phys - map->phys);
} }
void __iomem *__ref
acpi_os_map_iomem(acpi_physical_address phys, acpi_size size)
{
return __acpi_os_map_iomem(phys, size, false);
}
EXPORT_SYMBOL_GPL(acpi_os_map_iomem); EXPORT_SYMBOL_GPL(acpi_os_map_iomem);
void *__ref acpi_os_map_memory(acpi_physical_address phys, acpi_size size) void *__ref acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
{ {
return (void *)__acpi_os_map_iomem(phys, size, true); return (void *)acpi_os_map_iomem(phys, size);
} }
EXPORT_SYMBOL_GPL(acpi_os_map_memory); EXPORT_SYMBOL_GPL(acpi_os_map_memory);
......
...@@ -14,14 +14,6 @@ static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys, ...@@ -14,14 +14,6 @@ static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys,
} }
#endif #endif
#ifndef acpi_os_memmap
static inline void __iomem *acpi_os_memmap(acpi_physical_address phys,
acpi_size size)
{
return ioremap_cache(phys, size);
}
#endif
extern bool acpi_permanent_mmap; extern bool acpi_permanent_mmap;
void __iomem __ref void __iomem __ref
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment