Commit 4f31d53c authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'acpi-mm'

* acpi-mm:
  ACPI: OSL: Prevent acpi_release_memory() from returning too early
  ACPI: ioremap: avoid redundant rounding to OS page size
parents 6556b0a8 33f61d72
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -350,7 +350,7 @@ void __iomem __ref

	pg_off = round_down(phys, PAGE_SIZE);
	pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off;
	virt = acpi_map(pg_off, pg_sz);
	virt = acpi_map(phys, size);
	if (!virt) {
		mutex_unlock(&acpi_ioremap_lock);
		kfree(map);
@@ -358,7 +358,7 @@ void __iomem __ref
	}

	INIT_LIST_HEAD(&map->list);
	map->virt = virt;
	map->virt = (void __iomem __force *)((unsigned long)virt & PAGE_MASK);
	map->phys = pg_off;
	map->size = pg_sz;
	map->track.refcount = 1;
@@ -1575,11 +1575,26 @@ static acpi_status acpi_deactivate_mem_region(acpi_handle handle, u32 level,
acpi_status acpi_release_memory(acpi_handle handle, struct resource *res,
				u32 level)
{
	acpi_status status;

	if (!(res->flags & IORESOURCE_MEM))
		return AE_TYPE;

	return acpi_walk_namespace(ACPI_TYPE_REGION, handle, level,
				   acpi_deactivate_mem_region, NULL, res, NULL);
	status = acpi_walk_namespace(ACPI_TYPE_REGION, handle, level,
				     acpi_deactivate_mem_region, NULL,
				     res, NULL);
	if (ACPI_FAILURE(status))
		return status;

	/*
	 * Wait for all of the mappings queued up for removal by
	 * acpi_deactivate_mem_region() to actually go away.
	 */
	synchronize_rcu();
	rcu_barrier();
	flush_scheduled_work();

	return AE_OK;
}
EXPORT_SYMBOL_GPL(acpi_release_memory);