On Fri, Feb 19, 2016 at 3:27 AM, Viresh Kumar <viresh.ku...@linaro.org> wrote: > On 18-02-16, 17:20, Rafael J. Wysocki wrote: >> On Thu, Feb 18, 2016 at 6:24 AM, Viresh Kumar <viresh.ku...@linaro.org> >> wrote: >> > On 18-02-16, 02:19, Rafael J. Wysocki wrote: > >> >> @@ -112,7 +112,7 @@ static ssize_t governor_store(struct kob >> >> >> >> mutex_lock(&dbs_data->mutex); >> >> >> >> - if (gattr->store) >> >> + if (dbs_data->usage_count && gattr->store) >> > >> > That's not gonna be enough. The above lock doesn't guarantee >> > protection with any such races. > > Oops, I completely misread it. Really sorry about that. > > But now that I have read the code again, I wonder why we need this protection > at > all. The first thing we do after decrementing the usage_count counter, is we > put > the kobject. Which will ensure that the sysfs files are all gone. So, what is > the race we are trying to fix then?
The ->store() callbacks for different attributes may do silly stuff like walking all CPUs in the system and updating per-CPU data for them. If the dbs_data the callback has been called for is going away, this is pointless at best and may be actually harmful depending on what the callback is really doing. Thanks, Rafael