On 23/05/2018 11:55, Viresh Kumar wrote: > On 23-05-18, 10:00, Daniel Lezcano wrote:
[ ... ] > Maybe I wasn't able to explain the problem I see, but lemme retry > that. Assume that there is only one use and that id cpu-idle-cooling. > We are currently running the idle loop with idle duration X and run > duration Y. > > Now lets say the cooling device gets unregistered itself (maybe module > removal, etc). And it calls idle_injection_unregister() with a valid > pointer. Not sure if the thermal framework will call set_cur_state > anymore. But the problem will remain even if it does that. > > We call idle_injection_stop() from unregister, which will cancel > hrtimer, set durations as 0 and return. Then we free the iidev. It is > certainly possible at this point of time that the kthread is still > running the idle loop which it may have started before unregister was > called. And so after the idle loop is finished it will try to access > ii_dev, which is already freed. > > So, idle_injection_stop() needs to guarantee that the kthread and the > hrtimer are all stopped now and no one is using the ii_dev structure > anymore. > > Perhaps you need some completion stuff here to give confirmation here, > etc. Ok, let me come back with something. Thanks for reviewing again. -- Daniel -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog