Skip to content

Commit

Permalink
Merge back cpufreq changes for v5.15.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rafael J. Wysocki committed Aug 23, 2021
2 parents a87a109 + e5c6b31 commit 43dde64
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 19 deletions.
4 changes: 2 additions & 2 deletions drivers/cpufreq/acpi-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ static ssize_t store_cpb(struct cpufreq_policy *policy, const char *buf,
if (ret || val > 1)
return -EINVAL;

get_online_cpus();
cpus_read_lock();
set_boost(policy, val);
put_online_cpus();
cpus_read_unlock();

return count;
}
Expand Down
6 changes: 3 additions & 3 deletions drivers/cpufreq/cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -2654,18 +2654,18 @@ int cpufreq_boost_trigger_state(int state)
cpufreq_driver->boost_enabled = state;
write_unlock_irqrestore(&cpufreq_driver_lock, flags);

get_online_cpus();
cpus_read_lock();
for_each_active_policy(policy) {
ret = cpufreq_driver->set_boost(policy, state);
if (ret)
goto err_reset_state;
}
put_online_cpus();
cpus_read_unlock();

return 0;

err_reset_state:
put_online_cpus();
cpus_read_unlock();

write_lock_irqsave(&cpufreq_driver_lock, flags);
cpufreq_driver->boost_enabled = !state;
Expand Down
4 changes: 2 additions & 2 deletions drivers/cpufreq/cpufreq_ondemand.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ static void od_set_powersave_bias(unsigned int powersave_bias)
default_powersave_bias = powersave_bias;
cpumask_clear(&done);

get_online_cpus();
cpus_read_lock();
for_each_online_cpu(cpu) {
struct cpufreq_policy *policy;
struct policy_dbs_info *policy_dbs;
Expand All @@ -442,7 +442,7 @@ static void od_set_powersave_bias(unsigned int powersave_bias)
od_tuners = dbs_data->tuners;
od_tuners->powersave_bias = default_powersave_bias;
}
put_online_cpus();
cpus_read_unlock();
}

void od_register_powersave_bias_handler(unsigned int (*f)
Expand Down
4 changes: 2 additions & 2 deletions drivers/cpufreq/intel_pstate.c
Original file line number Diff line number Diff line change
Expand Up @@ -2969,7 +2969,7 @@ static void intel_pstate_driver_cleanup(void)
{
unsigned int cpu;

get_online_cpus();
cpus_read_lock();
for_each_online_cpu(cpu) {
if (all_cpu_data[cpu]) {
if (intel_pstate_driver == &intel_pstate)
Expand All @@ -2979,7 +2979,7 @@ static void intel_pstate_driver_cleanup(void)
all_cpu_data[cpu] = NULL;
}
}
put_online_cpus();
cpus_read_unlock();

intel_pstate_driver = NULL;
}
Expand Down
6 changes: 3 additions & 3 deletions drivers/cpufreq/powernow-k8.c
Original file line number Diff line number Diff line change
Expand Up @@ -1180,18 +1180,18 @@ static int powernowk8_init(void)
if (!x86_match_cpu(powernow_k8_ids))
return -ENODEV;

get_online_cpus();
cpus_read_lock();
for_each_online_cpu(i) {
smp_call_function_single(i, check_supported_cpu, &ret, 1);
if (!ret)
supported_cpus++;
}

if (supported_cpus != num_online_cpus()) {
put_online_cpus();
cpus_read_unlock();
return -ENODEV;
}
put_online_cpus();
cpus_read_unlock();

ret = cpufreq_register_driver(&cpufreq_amd64_driver);
if (ret)
Expand Down
4 changes: 2 additions & 2 deletions drivers/cpufreq/powernv-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -918,7 +918,7 @@ static void powernv_cpufreq_work_fn(struct work_struct *work)
unsigned int cpu;
cpumask_t mask;

get_online_cpus();
cpus_read_lock();
cpumask_and(&mask, &chip->mask, cpu_online_mask);
smp_call_function_any(&mask,
powernv_cpufreq_throttle_check, NULL, 0);
Expand All @@ -939,7 +939,7 @@ static void powernv_cpufreq_work_fn(struct work_struct *work)
cpufreq_cpu_put(policy);
}
out:
put_online_cpus();
cpus_read_unlock();
}

static int powernv_cpufreq_occ_msg(struct notifier_block *nb,
Expand Down
16 changes: 11 additions & 5 deletions kernel/sched/cpufreq_schedutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -537,9 +537,17 @@ static struct attribute *sugov_attrs[] = {
};
ATTRIBUTE_GROUPS(sugov);

static void sugov_tunables_free(struct kobject *kobj)
{
struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj);

kfree(to_sugov_tunables(attr_set));
}

static struct kobj_type sugov_tunables_ktype = {
.default_groups = sugov_groups,
.sysfs_ops = &governor_sysfs_ops,
.release = &sugov_tunables_free,
};

/********************** cpufreq governor interface *********************/
Expand Down Expand Up @@ -639,12 +647,10 @@ static struct sugov_tunables *sugov_tunables_alloc(struct sugov_policy *sg_polic
return tunables;
}

static void sugov_tunables_free(struct sugov_tunables *tunables)
static void sugov_clear_global_tunables(void)
{
if (!have_governor_per_policy())
global_tunables = NULL;

kfree(tunables);
}

static int sugov_init(struct cpufreq_policy *policy)
Expand Down Expand Up @@ -707,7 +713,7 @@ static int sugov_init(struct cpufreq_policy *policy)
fail:
kobject_put(&tunables->attr_set.kobj);
policy->governor_data = NULL;
sugov_tunables_free(tunables);
sugov_clear_global_tunables();

stop_kthread:
sugov_kthread_stop(sg_policy);
Expand All @@ -734,7 +740,7 @@ static void sugov_exit(struct cpufreq_policy *policy)
count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook);
policy->governor_data = NULL;
if (!count)
sugov_tunables_free(tunables);
sugov_clear_global_tunables();

mutex_unlock(&global_tunables_lock);

Expand Down

0 comments on commit 43dde64

Please sign in to comment.