cpufreq: intel_pstate: hybrid: Avoid exposing two global attributes
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 12 May 2021 14:15:48 +0000 (16:15 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 21 May 2021 16:44:55 +0000 (18:44 +0200)
The turbo_pct and num_pstates sysfs attributes represent CPU
properties that may be different for differenty types of CPUs in
a hybrid processor, so avoid exposing them in that case.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Documentation/admin-guide/pm/intel_pstate.rst
drivers/cpufreq/intel_pstate.c

index df29b4f..235f102 100644 (file)
@@ -365,6 +365,9 @@ argument is passed to the kernel in the command line.
        inclusive) including both turbo and non-turbo P-states (see
        `Turbo P-states Support`_).
 
+       This attribute is present only if the value exposed by it is the same
+       for all of the CPUs in the system.
+
        The value of this attribute is not affected by the ``no_turbo``
        setting described `below <no_turbo_attr_>`_.
 
@@ -374,6 +377,9 @@ argument is passed to the kernel in the command line.
        Ratio of the `turbo range <turbo_>`_ size to the size of the entire
        range of supported P-states, in percent.
 
+       This attribute is present only if the value exposed by it is the same
+       for all of the CPUs in the system.
+
        This attribute is read-only.
 
 .. _no_turbo_attr:
index 0e69dff..45f59e2 100644 (file)
@@ -1365,8 +1365,6 @@ define_one_global_rw(energy_efficiency);
 static struct attribute *intel_pstate_attributes[] = {
        &status.attr,
        &no_turbo.attr,
-       &turbo_pct.attr,
-       &num_pstates.attr,
        NULL
 };
 
@@ -1391,6 +1389,14 @@ static void __init intel_pstate_sysfs_expose_params(void)
        if (WARN_ON(rc))
                return;
 
+       if (!boot_cpu_has(X86_FEATURE_HYBRID_CPU)) {
+               rc = sysfs_create_file(intel_pstate_kobject, &turbo_pct.attr);
+               WARN_ON(rc);
+
+               rc = sysfs_create_file(intel_pstate_kobject, &num_pstates.attr);
+               WARN_ON(rc);
+       }
+
        /*
         * If per cpu limits are enforced there are no global limits, so
         * return without creating max/min_perf_pct attributes
@@ -1417,6 +1423,11 @@ static void __init intel_pstate_sysfs_remove(void)
 
        sysfs_remove_group(intel_pstate_kobject, &intel_pstate_attr_group);
 
+       if (!boot_cpu_has(X86_FEATURE_HYBRID_CPU)) {
+               sysfs_remove_file(intel_pstate_kobject, &num_pstates.attr);
+               sysfs_remove_file(intel_pstate_kobject, &turbo_pct.attr);
+       }
+
        if (!per_cpu_limits) {
                sysfs_remove_file(intel_pstate_kobject, &max_perf_pct.attr);
                sysfs_remove_file(intel_pstate_kobject, &min_perf_pct.attr);