]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
Merge tag 'pm-final-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 9 Nov 2017 19:16:28 +0000 (11:16 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 9 Nov 2017 19:16:28 +0000 (11:16 -0800)
Pull final power management fixes from Rafael Wysocki:
 "These fix a regression in the schedutil cpufreq governor introduced by
  a recent change and blacklist Dell XPS13 9360 from using the Low Power
  S0 Idle _DSM interface which triggers serious problems on one of these
  machines.

  Specifics:

   - Prevent the schedutil cpufreq governor from using the utilization
     of a wrong CPU in some cases which started to happen after one of
     the recent changes in it (Chris Redpath).

   - Blacklist Dell XPS13 9360 from using the Low Power S0 Idle _DSM
     interface as that causes serious issue (related to NVMe) to appear
     on one of these machines, even though the other Dells XPS13 9360 in
     somewhat different HW configurations behave correctly (Rafael
     Wysocki)"

* tag 'pm-final-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI / PM: Blacklist Low Power S0 Idle _DSM for Dell XPS13 9360
  cpufreq: schedutil: Examine the correct CPU when we update util

drivers/acpi/sleep.c
kernel/sched/cpufreq_schedutil.c

index 6804ddab3052962d28e5e4954ab0c4e830675de4..8082871b409a6d631a80b5d2327e9fcb6a1509d4 100644 (file)
@@ -160,6 +160,14 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
        return 0;
 }
 
+static bool acpi_sleep_no_lps0;
+
+static int __init init_no_lps0(const struct dmi_system_id *d)
+{
+       acpi_sleep_no_lps0 = true;
+       return 0;
+}
+
 static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
        {
        .callback = init_old_suspend_ordering,
@@ -343,6 +351,19 @@ static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
                DMI_MATCH(DMI_PRODUCT_NAME, "80E3"),
                },
        },
+       /*
+        * https://bugzilla.kernel.org/show_bug.cgi?id=196907
+        * Some Dell XPS13 9360 cannot do suspend-to-idle using the Low Power
+        * S0 Idle firmware interface.
+        */
+       {
+       .callback = init_no_lps0,
+       .ident = "Dell XPS13 9360",
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+               DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"),
+               },
+       },
        {},
 };
 
@@ -485,6 +506,7 @@ static void acpi_pm_end(void)
 }
 #else /* !CONFIG_ACPI_SLEEP */
 #define acpi_target_sleep_state        ACPI_STATE_S0
+#define acpi_sleep_no_lps0     (false)
 static inline void acpi_sleep_dmi_check(void) {}
 #endif /* CONFIG_ACPI_SLEEP */
 
@@ -863,6 +885,12 @@ static int lps0_device_attach(struct acpi_device *adev,
        if (lps0_device_handle)
                return 0;
 
+       if (acpi_sleep_no_lps0) {
+               acpi_handle_info(adev->handle,
+                                "Low Power S0 Idle interface disabled\n");
+               return 0;
+       }
+
        if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0))
                return 0;
 
index 9209d83ecdcf1a52faa9eb3d7d741970b6631faf..ba0da243fdd8376196374c9ef5f9583cbb5ca78b 100644 (file)
@@ -649,6 +649,7 @@ static int sugov_start(struct cpufreq_policy *policy)
                struct sugov_cpu *sg_cpu = &per_cpu(sugov_cpu, cpu);
 
                memset(sg_cpu, 0, sizeof(*sg_cpu));
+               sg_cpu->cpu = cpu;
                sg_cpu->sg_policy = sg_policy;
                sg_cpu->flags = SCHED_CPUFREQ_RT;
                sg_cpu->iowait_boost_max = policy->cpuinfo.max_freq;
@@ -714,11 +715,6 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 
 static int __init sugov_register(void)
 {
-       int cpu;
-
-       for_each_possible_cpu(cpu)
-               per_cpu(sugov_cpu, cpu).cpu = cpu;
-
        return cpufreq_register_governor(&schedutil_gov);
 }
 fs_initcall(sugov_register);