Commit 2287a240 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'acpi-4.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fixes from Rafael Wysocki:
 "These fix two regressions introduced recently, one by reverting the
  problematic commit and one by fixing up locking in the ACPICA core.

  Specifics:

   - Revert a recent change that added an ACPI video blacklist entry for
     HP Pavilion dv6 as it turned to introduce backlight handling
     regressions on some systems (Hans de Goede).

   - Fix locking in the ACPICA core to avoid deadlocks related to table
     loading that were exposed by a recent change in that area (Lv
     Zheng)"

* tag 'acpi-4.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  Revert "ACPI / video: Add force_native quirk for HP Pavilion dv6"
  ACPICA: Tables: Fix hidden logic related to acpi_tb_install_standard_table()
parents 7d3a0fa5 0389227d
...@@ -852,23 +852,18 @@ acpi_tb_install_and_load_table(acpi_physical_address address, ...@@ -852,23 +852,18 @@ acpi_tb_install_and_load_table(acpi_physical_address address,
ACPI_FUNCTION_TRACE(tb_install_and_load_table); ACPI_FUNCTION_TRACE(tb_install_and_load_table);
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
/* Install the table and load it into the namespace */ /* Install the table and load it into the namespace */
status = acpi_tb_install_standard_table(address, flags, TRUE, status = acpi_tb_install_standard_table(address, flags, TRUE,
override, &i); override, &i);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
goto unlock_and_exit; goto exit;
} }
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
status = acpi_tb_load_table(i, acpi_gbl_root_node); status = acpi_tb_load_table(i, acpi_gbl_root_node);
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
unlock_and_exit: exit:
*table_index = i; *table_index = i;
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -217,6 +217,10 @@ acpi_tb_install_standard_table(acpi_physical_address address, ...@@ -217,6 +217,10 @@ acpi_tb_install_standard_table(acpi_physical_address address,
goto release_and_exit; goto release_and_exit;
} }
/* Acquire the table lock */
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
if (reload) { if (reload) {
/* /*
* Validate the incoming table signature. * Validate the incoming table signature.
...@@ -244,7 +248,7 @@ acpi_tb_install_standard_table(acpi_physical_address address, ...@@ -244,7 +248,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
new_table_desc.signature.integer)); new_table_desc.signature.integer));
status = AE_BAD_SIGNATURE; status = AE_BAD_SIGNATURE;
goto release_and_exit; goto unlock_and_exit;
} }
/* Check if table is already registered */ /* Check if table is already registered */
...@@ -279,7 +283,7 @@ acpi_tb_install_standard_table(acpi_physical_address address, ...@@ -279,7 +283,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
/* Table is still loaded, this is an error */ /* Table is still loaded, this is an error */
status = AE_ALREADY_EXISTS; status = AE_ALREADY_EXISTS;
goto release_and_exit; goto unlock_and_exit;
} else { } else {
/* /*
* Table was unloaded, allow it to be reloaded. * Table was unloaded, allow it to be reloaded.
...@@ -290,6 +294,7 @@ acpi_tb_install_standard_table(acpi_physical_address address, ...@@ -290,6 +294,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
* indicate the re-installation. * indicate the re-installation.
*/ */
acpi_tb_uninstall_table(&new_table_desc); acpi_tb_uninstall_table(&new_table_desc);
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
*table_index = i; *table_index = i;
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
...@@ -303,11 +308,19 @@ acpi_tb_install_standard_table(acpi_physical_address address, ...@@ -303,11 +308,19 @@ acpi_tb_install_standard_table(acpi_physical_address address,
/* Invoke table handler if present */ /* Invoke table handler if present */
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
if (acpi_gbl_table_handler) { if (acpi_gbl_table_handler) {
(void)acpi_gbl_table_handler(ACPI_TABLE_EVENT_INSTALL, (void)acpi_gbl_table_handler(ACPI_TABLE_EVENT_INSTALL,
new_table_desc.pointer, new_table_desc.pointer,
acpi_gbl_table_handler_context); acpi_gbl_table_handler_context);
} }
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
unlock_and_exit:
/* Release the table lock */
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
release_and_exit: release_and_exit:
......
...@@ -305,17 +305,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = { ...@@ -305,17 +305,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "Dell System XPS L702X"), DMI_MATCH(DMI_PRODUCT_NAME, "Dell System XPS L702X"),
}, },
}, },
{
/* https://bugzilla.redhat.com/show_bug.cgi?id=1204476 */
/* https://bugs.launchpad.net/ubuntu/+source/linux-lts-trusty/+bug/1416940 */
.callback = video_detect_force_native,
.ident = "HP Pavilion dv6",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv6 Notebook PC"),
},
},
{ }, { },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment