On 21/03/2019 10:36, Ulf Hansson wrote: > On Thu, 21 Mar 2019 at 08:47, Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> wrote: [ ... ] >>> cancel_work_sync(&genpd->power_off_work); >>> - kfree(genpd->free); >>> + if (genpd->free_states) >> >> Is this test necessary as the free_states function is initialized with >> the genpd_set_default_power_state() in any case? > > That's the case when the genpd provider did not allocate states, so > then we know genpd deals with this properly for us. > > In the other case, when genpd provider has allocates states, then we > need to check that the provider has assigned the ->free_states() > callback before we invokes it, as there is no guarantees that it had. > > I was initially tempted to do this check already at pm_genpd_init(), > as it would allow us to check for the error condition and return an > error code if it's not been assigned. However, that requires me to > change all providers that currently "allocates" their states, so that > isn't really a smooth way forward. Perhaps, we should simply print a > message to the log about this condition in pm_genpd_init(), as to > start with!? I can add a patch on top doing that. Yes, that would make sense to track those providers which do not initialize the free field. Acked-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> -- <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