]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq: Always create freq-table related sysfs file
authorViresh Kumar <viresh.kumar@linaro.org>
Wed, 22 Jan 2025 10:01:49 +0000 (15:31 +0530)
committerViresh Kumar <viresh.kumar@linaro.org>
Fri, 7 Feb 2025 04:15:11 +0000 (09:45 +0530)
Currently it is left for the individual drivers to set the available and
boost frequencies related attributes in the cpufreq_driver->attr field.
Some drivers provide them, while others don't.

A quick search revealed that only the drivers that set the
policy->freq_table field, enable these attributes. Which makes sense as
well, since the show_available_freqs() helper works only if the
freq_table is present.

In order to simplify drivers, create the relevant sysfs files forcefully
from cpufreq core.

For now, skip adding them twice. This can be removed once all the
drivers are updated.

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

index a12e1da89163897dbf1b9b0c26c9b661baef73fe..71ecf6a004e852d53e7e2a9bf100cefcf7c2a0f2 100644 (file)
@@ -1059,9 +1059,31 @@ static int cpufreq_add_dev_interface(struct cpufreq_policy *policy)
        struct freq_attr **drv_attr;
        int ret = 0;
 
+       /* Attributes that need freq_table */
+       if (policy->freq_table) {
+               ret = sysfs_create_file(&policy->kobj,
+                               &cpufreq_freq_attr_scaling_available_freqs.attr);
+               if (ret)
+                       return ret;
+
+               if (cpufreq_boost_supported()) {
+                       ret = sysfs_create_file(&policy->kobj,
+                               &cpufreq_freq_attr_scaling_boost_freqs.attr);
+                       if (ret)
+                               return ret;
+               }
+       }
+
        /* set up files for this cpu device */
        drv_attr = cpufreq_driver->attr;
        while (drv_attr && *drv_attr) {
+               /* These are already added, skip them */
+               if (*drv_attr == &cpufreq_freq_attr_scaling_available_freqs ||
+                   *drv_attr == &cpufreq_freq_attr_scaling_boost_freqs) {
+                       drv_attr++;
+                       continue;
+               }
+
                ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
                if (ret)
                        return ret;