Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | [RFT][PATCH 0/3] ACPI: ACPICA / OSL: Avoid unmapping ACPI memory inside of the AML interpreter | Date | Wed, 10 Jun 2020 14:17:04 +0200 |
| |
Hi All,
This series is to address the problem with RCU synchronization occurring, possibly relatively often, inside of acpi_ex_system_memory_space_handler(), when the namespace and interpreter mutexes are held.
The basic idea is to avoid the actual unmapping of memory in acpi_ex_system_memory_space_handler() by making it take the advantage of the reference counting of memory mappings utilized by the OSL layer in Linux.
The basic assumption in patch [1/3] is that if the special ACPI_OS_MAP_MEMORY_FAST_PATH() macro is present, it can be used to increment the reference counter of a known-existing memory mapping in the OS layer which then is dropped by the subsequent acpi_os_unmap_memory() without unmapping the address range at hand. That can be utilized by acpi_ex_system_memory_space_handler() to prevent the reference counters of all mappings used by it from dropping down to 0 (which also prevents the address ranges associated with them from being unmapped) so that they can be unmapped later (specifically, at the operation region deactivation time).
Patch [2/3] defers the unmapping even further, until the namespace and interpreter mutexes are released, to avoid invoking the RCU synchronization under theses mutexes.
Finally, patch [3/3] changes the OS layer in Linux to provide the ACPI_OS_MAP_MEMORY_FAST_PATH() macro.
Note that if this macro is not defined, the code works the way it used to.
The series is available from the git branch at
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \ acpica-osl
for easier testing.
Cheers, Rafael
| |