Messages in this thread | | | Date | Fri, 13 May 2022 09:57:05 +0530 | From | Viresh Kumar <> | Subject | Re: [PATCH v3] cpufreq: fix race on cpufreq online |
| |
On 12-05-22, 12:49, Rafael J. Wysocki wrote: > Well, would there be a problem with moving the > cpufreq_policy_put_kobj() call to the front of cpufreq_policy_free()?
Emptying cpufreq_cpu_data first is required, else someone else will end up doing kobject_get() again.
> If we did that, we'd know that everything could be torn down safely, > because nobody would be holding references to the policy any more.
With the way we are progressing now, we will always have policy->cpus empty while we reach cpufreq_policy_free(). With that I think we will be safe with the current code here. I would also add a BUG_ON() here for non empty policy->cpus to be safe.
> > > TBH, I'm not sure why show() doesn't check policy_is_inactive() under the rwsem. > > > > I agree, both show/store should have it. > > > > > Moreover, I'm not sure why the locking dance in store() is necessary. > > > > commit fdd320da84c6 ("cpufreq: Lock CPU online/offline in cpufreq_register_driver()") > > I get that, but I'm wondering if locking CPU hotplug from store() is > needed at all. I mean, if we are in store(), we are holding an active > reference to the policy kobject, so the policy cannot go away until we > are done anyway. Thus it should be sufficient to use the policy rwsem > for synchronization.
I think after the current patchset is applied and we have the inactive policy check in store(), we won't required the dance after all.
-- viresh
| |