Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2287a240 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -852,23 +852,18 @@ acpi_tb_install_and_load_table(acpi_physical_address address,

	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 */

	status = acpi_tb_install_standard_table(address, flags, TRUE,
						override, &i);
	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);
	(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);

unlock_and_exit:
exit:
	*table_index = i;
	(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
	return_ACPI_STATUS(status);
}

+15 −2
Original line number Diff line number Diff line
@@ -217,6 +217,10 @@ acpi_tb_install_standard_table(acpi_physical_address address,
		goto release_and_exit;
	}

	/* Acquire the table lock */

	(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);

	if (reload) {
		/*
		 * Validate the incoming table signature.
@@ -244,7 +248,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
					 new_table_desc.signature.integer));

			status = AE_BAD_SIGNATURE;
			goto release_and_exit;
			goto unlock_and_exit;
		}

		/* Check if table is already registered */
@@ -279,7 +283,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
				/* Table is still loaded, this is an error */

				status = AE_ALREADY_EXISTS;
				goto release_and_exit;
				goto unlock_and_exit;
			} else {
				/*
				 * Table was unloaded, allow it to be reloaded.
@@ -290,6 +294,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
				 * indicate the re-installation.
				 */
				acpi_tb_uninstall_table(&new_table_desc);
				(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
				*table_index = i;
				return_ACPI_STATUS(AE_OK);
			}
@@ -303,11 +308,19 @@ acpi_tb_install_standard_table(acpi_physical_address address,

	/* Invoke table handler if present */

	(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
	if (acpi_gbl_table_handler) {
		(void)acpi_gbl_table_handler(ACPI_TABLE_EVENT_INSTALL,
					     new_table_desc.pointer,
					     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:

+0 −11
Original line number Diff line number Diff line
@@ -305,17 +305,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
		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"),
		},
	},

	{ },
};