Commit ea1f9163 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -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);
#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;
#define PHYS_CPUID_INVALID INVALID_HWID

+3 −16
Original line number Diff line number Diff line
@@ -273,8 +273,7 @@ pgprot_t __acpi_get_mem_attribute(phys_addr_t addr)
	return __pgprot(PROT_DEVICE_nGnRnE);
}

static void __iomem *__acpi_os_ioremap(acpi_physical_address phys,
				       acpi_size size, bool memory)
void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size)
{
	efi_memory_desc_t *md, *region = NULL;
	pgprot_t prot;
@@ -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
	 * EFI memory map at all, as it only describes normal memory, and MMIO
	 * regions that require a virtual mapping to make them accessible to
	 * the EFI runtime services. Determine the region default
	 * attributes by checking the requested memory semantics.
	 * the EFI runtime services.
	 */
	prot = memory ? __pgprot(PROT_NORMAL_NC) :
			__pgprot(PROT_DEVICE_nGnRnE);
	prot = __pgprot(PROT_DEVICE_nGnRnE);
	if (region) {
		switch (region->type) {
		case EFI_LOADER_CODE:
@@ -364,16 +361,6 @@ static void __iomem *__acpi_os_ioremap(acpi_physical_address phys,
	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.
 *
+7 −16
Original line number Diff line number Diff line
@@ -284,8 +284,7 @@ acpi_map_lookup_virt(void __iomem *virt, acpi_size size)
#define should_use_kmap(pfn)   page_is_ram(pfn)
#endif

static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz,
			      bool memory)
static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz)
{
	unsigned long pfn;

@@ -295,8 +294,7 @@ static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz,
			return NULL;
		return (void __iomem __force *)kmap(pfn_to_page(pfn));
	} else
		return memory ? acpi_os_memmap(pg_off, pg_sz) :
				acpi_os_ioremap(pg_off, pg_sz);
		return acpi_os_ioremap(pg_off, pg_sz);
}

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.
 * @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
 * 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)
 * During early init (when acpi_permanent_mmap has not been set yet) this
 * routine simply calls __acpi_map_table() to get the job done.
 */
static void __iomem __ref
*__acpi_os_map_iomem(acpi_physical_address phys, acpi_size size, bool memory)
void __iomem __ref
*acpi_os_map_iomem(acpi_physical_address phys, acpi_size size)
{
	struct acpi_ioremap *map;
	void __iomem *virt;
@@ -356,7 +353,7 @@ static void __iomem __ref

	pg_off = round_down(phys, PAGE_SIZE);
	pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off;
	virt = acpi_map(phys, size, memory);
	virt = acpi_map(phys, size);
	if (!virt) {
		mutex_unlock(&acpi_ioremap_lock);
		kfree(map);
@@ -375,17 +372,11 @@ static void __iomem __ref
	mutex_unlock(&acpi_ioremap_lock);
	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);

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);

+0 −8
Original line number Diff line number Diff line
@@ -14,14 +14,6 @@ static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys,
}
#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;

void __iomem __ref