Commit 24ea63ea authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ACPI fixes from Rafael Wysocki:
 "These restore corner case behavior of the EC driver related to the
  handling of defective ACPI tables and fix a recent regression in the
  ACPI processor driver:

   - Prevent the ACPI EC driver from ignoring ECDT information in the
     cases when the ID string in the ECDT is invalid, but not empty, to
     fix thouchpad detection on ThinkBook 14 G7 IML (Armin Wolf)

   - Rearrange checks in acpi_processor_ppc_init() to restore the
     handling of frequency QoS requests related to _PPC limits
     inadvertently broken by a recent update (Rafael Wysocki)"

* tag 'acpi-6.17-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI: EC: Relax sanity check of the ECDT ID string
  ACPI: processor: perflib: Move problematic pr->performance check
parents c28d28a7 40f2f1aa
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -2033,7 +2033,7 @@ void __init acpi_ec_ecdt_probe(void)
		goto out;
	}

	if (!strstarts(ecdt_ptr->id, "\\")) {
	if (!strlen(ecdt_ptr->id)) {
		/*
		 * The ECDT table on some MSI notebooks contains invalid data, together
		 * with an empty ID string ("").
@@ -2042,9 +2042,13 @@ void __init acpi_ec_ecdt_probe(void)
		 * a "fully qualified reference to the (...) embedded controller device",
		 * so this string always has to start with a backslash.
		 *
		 * By verifying this we can avoid such faulty ECDT tables in a safe way.
		 * However some ThinkBook machines have a ECDT table with a valid EC
		 * description but an invalid ID string ("_SB.PC00.LPCB.EC0").
		 *
		 * Because of this we only check if the ID string is empty in order to
		 * avoid the obvious cases.
		 */
		pr_err(FW_BUG "Ignoring ECDT due to invalid ID string \"%s\"\n", ecdt_ptr->id);
		pr_err(FW_BUG "Ignoring ECDT due to empty ID string\n");
		goto out;
	}

+4 −1
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ void acpi_processor_ppc_init(struct cpufreq_policy *policy)
		struct acpi_processor *pr = per_cpu(processors, cpu);
		int ret;

		if (!pr || !pr->performance)
		if (!pr)
			continue;

		/*
@@ -197,6 +197,9 @@ void acpi_processor_ppc_init(struct cpufreq_policy *policy)
			pr_err("Failed to add freq constraint for CPU%d (%d)\n",
			       cpu, ret);

		if (!pr->performance)
			continue;

		ret = acpi_processor_get_platform_limit(pr);
		if (ret)
			pr_err("Failed to update freq constraint for CPU%d (%d)\n",