Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ACPICA: take ACPI_MTX_INTERPRETER in acpi_unload_table_id()

acpi_tb_delete_namespace_by_owner() expects ACPI_MTX_INTERPRETER to be
taken. This fixes the following issue:

ACPI Error: Mutex [0x0] is not acquired, cannot release (20141107/utmutex-322)
Call Trace:
[<ffffffff81b0bd28>] dump_stack+0x4f/0x7b
[<ffffffff81546bfc>] acpi_ut_release_mutex+0x47/0x67
[<ffffffff81542cf1>] acpi_tb_delete_namespace_by_owner+0x57/0x8d
[<ffffffff81543ef1>] acpi_unload_table_id+0x3a/0x5e

Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Octavian Purdila and committed by
Rafael J. Wysocki
97d74657 ec6f34e5

+7
+7
drivers/acpi/acpica/tbxface.c
··· 281 281 282 282 ACPI_FUNCTION_TRACE(acpi_unload_table_id); 283 283 284 + status = acpi_ut_acquire_mutex(ACPI_MTX_INTERPRETER); 285 + if (ACPI_FAILURE(status)) { 286 + return_ACPI_STATUS(status); 287 + } 288 + 284 289 /* Find table in the global table list */ 285 290 for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) { 286 291 if (id != acpi_gbl_root_table_list.tables[i].owner_id) { ··· 302 297 acpi_tb_set_table_loaded_flag(i, FALSE); 303 298 break; 304 299 } 300 + 301 + (void)acpi_ut_release_mutex(ACPI_MTX_INTERPRETER); 305 302 return_ACPI_STATUS(status); 306 303 } 307 304