Messages in this thread | | | Date | Fri, 20 May 2016 07:52:47 +0530 | From | Viresh Kumar <> | Subject | Re: [PATCH v2] cpufreq: stats: Walk online CPUs with CPU offline/online locked |
| |
On 20-05-16, 03:41, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Loops over online CPUs in cpufreq_stats_init() and cpufreq_stats_exit() > should be carried out with CPU offline/online locked or races are > possible otherwise, so make that happen. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > > v1 -> v2: On a second thought, add the policy notifier in cpufreq_stats_init() > with CPU offline/online locked too. > > --- > drivers/cpufreq/cpufreq_stats.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > Index: linux-pm/drivers/cpufreq/cpufreq_stats.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/cpufreq_stats.c > +++ linux-pm/drivers/cpufreq/cpufreq_stats.c > @@ -317,10 +317,13 @@ static int __init cpufreq_stats_init(voi > unsigned int cpu; > > spin_lock_init(&cpufreq_stats_lock); > + > + get_online_cpus(); > + > ret = cpufreq_register_notifier(¬ifier_policy_block, > CPUFREQ_POLICY_NOTIFIER);
Why is this required to be protected ?
> if (ret) > - return ret; > + goto out; > > for_each_online_cpu(cpu) > cpufreq_stats_create_table(cpu); > @@ -332,21 +335,28 @@ static int __init cpufreq_stats_init(voi > CPUFREQ_POLICY_NOTIFIER); > for_each_online_cpu(cpu) > cpufreq_stats_free_table(cpu);
Maybe we can make this for_each_possible_cpu() then, and so getting a policy will fail for CPUs which aren't online.
And we wouldn't need to use get_online_cpus() then ?
-- viresh
| |