cpufreq: acpi-cpufreq: Fix up the handling of cpb sysfs attribute
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 22 Jul 2015 20:12:10 +0000 (22:12 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 22 Jul 2015 20:12:10 +0000 (22:12 +0200)
The cpb sysfs attribute is only exposed by the ACPI cpufreq driver
after a runtime check.  For this purpose, the driver keeps a NULL
placeholder in its table of sysfs attributes and replaces the NULL
with a pointer to an attribute structure if it decides to expose
cpb.

That is confusing, so make the driver set the pointer to the cpb
attribute structure upfront and replace it with NULL if the
attribute should not be exposed instead.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/acpi-cpufreq.c

index af2bb8883d9609db34ca884294494c79e3e98843..15b921a9248c8f7b0e90bb01fe41d06c32e898bc 100644 (file)
@@ -888,7 +888,9 @@ static int acpi_cpufreq_resume(struct cpufreq_policy *policy)
 static struct freq_attr *acpi_cpufreq_attr[] = {
        &cpufreq_freq_attr_scaling_available_freqs,
        &freqdomain_cpus,
-       NULL,   /* this is a placeholder for cpb, do not remove */
+#ifdef CONFIG_X86_ACPI_CPUFREQ_CPB
+       &cpb,
+#endif
        NULL,
 };
 
@@ -961,17 +963,16 @@ static int __init acpi_cpufreq_init(void)
         * only if configured. This is considered legacy code, which
         * will probably be removed at some point in the future.
         */
-       if (check_amd_hwpstate_cpu(0)) {
-               struct freq_attr **iter;
+       if (!check_amd_hwpstate_cpu(0)) {
+               struct freq_attr **attr;
 
-               pr_debug("adding sysfs entry for cpb\n");
+               pr_debug("CPB unsupported, do not expose it\n");
 
-               for (iter = acpi_cpufreq_attr; *iter != NULL; iter++)
-                       ;
-
-               /* make sure there is a terminator behind it */
-               if (iter[1] == NULL)
-                       *iter = &cpb;
+               for (attr = acpi_cpufreq_attr; *attr; attr++)
+                       if (*attr == &cpb) {
+                               *attr = NULL;
+                               break;
+                       }
        }
 #endif
        acpi_cpufreq_boost_init();