diff options
author | Lv Zheng <lv.zheng@intel.com> | 2014-03-24 14:48:45 +0800 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-03-26 16:25:59 +0100 |
commit | e2b8ddcc6b3fbb860e15c5d52455735e128326aa (patch) | |
tree | bf13dd14aeb07496271de07f7392b470fd6a12be /drivers/acpi/acpica/exsystem.c | |
parent | 6e596084833b95662dfe90e1f30d83ccbd64575c (diff) |
ACPICA: Remove global option to serialize all control methods.
According to the reports, the "acpi_serialize" mechanism is broken as:
A. The parallel method calls can still happen when the interpreter lock is
released under the following conditions:
1. External callbacks are invoked, for example, by the region handlers,
the exception handlers, etc.;
2. Module level execution is performed when Load/LoadTable opcodes are
executed, and
3. The _REG control methods are invoked to complete the region
registrations.
B. For the following situations, the interpreter lock need to be released
even for a serialized method while currently, the lock-releasing
operation is marked as a no-op by
acpi_ex_relinquish/reacquire_interpreter() when this mechanism is
enabled:
1. Wait opcode is executed,
2. Acquire opcode is executed, and
3. Sleep opcode is executed.
This patch removes this mechanism and the internal
acpi_ex_relinquish/reacquire_interpreter() APIs. Lv Zheng.
References: https://bugzilla.kernel.org/show_bug.cgi?id=52191
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/exsystem.c')
-rw-r--r-- | drivers/acpi/acpica/exsystem.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/acpi/acpica/exsystem.c b/drivers/acpi/acpica/exsystem.c index 841caed11c0..f7da64123ed 100644 --- a/drivers/acpi/acpica/exsystem.c +++ b/drivers/acpi/acpica/exsystem.c @@ -77,7 +77,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout) /* We must wait, so unlock the interpreter */ - acpi_ex_relinquish_interpreter(); + acpi_ex_exit_interpreter(); status = acpi_os_wait_semaphore(semaphore, 1, timeout); @@ -87,7 +87,7 @@ acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout) /* Reacquire the interpreter */ - acpi_ex_reacquire_interpreter(); + acpi_ex_enter_interpreter(); } return_ACPI_STATUS(status); @@ -123,7 +123,7 @@ acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout) /* We must wait, so unlock the interpreter */ - acpi_ex_relinquish_interpreter(); + acpi_ex_exit_interpreter(); status = acpi_os_acquire_mutex(mutex, timeout); @@ -133,7 +133,7 @@ acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout) /* Reacquire the interpreter */ - acpi_ex_reacquire_interpreter(); + acpi_ex_enter_interpreter(); } return_ACPI_STATUS(status); @@ -198,7 +198,7 @@ acpi_status acpi_ex_system_do_sleep(u64 how_long) /* Since this thread will sleep, we must release the interpreter */ - acpi_ex_relinquish_interpreter(); + acpi_ex_exit_interpreter(); /* * For compatibility with other ACPI implementations and to prevent @@ -212,7 +212,7 @@ acpi_status acpi_ex_system_do_sleep(u64 how_long) /* And now we must get the interpreter again */ - acpi_ex_reacquire_interpreter(); + acpi_ex_enter_interpreter(); return (AE_OK); } |