On 24-10-16, 15:52, Stephen Boyd wrote: > On 10/20, Viresh Kumar wrote: > > The OPP structure must not be used out of the rcu protected section. > > Cache the values to be used in separate variables instead. > > > > Signed-off-by: Viresh Kumar <viresh.ku...@linaro.org> > > Was this found by visual inspection or through some static > checker? Just curious.
Visual inspection :) > > @@ -633,6 +634,14 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned > > long target_freq) > > return ret; > > } > > > > + if (IS_ERR(old_opp)) { > > + old_u_volt = 0; > > + } else { > > + old_u_volt = old_opp->u_volt; > > + old_u_volt_min = old_opp->u_volt_min; > > + old_u_volt_max = old_opp->u_volt_max; > > + } > > + > > u_volt = opp->u_volt; > > u_volt_min = opp->u_volt_min; > > u_volt_max = opp->u_volt_max; > > @@ -677,9 +686,10 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned > > long target_freq) > > __func__, old_freq); > > restore_voltage: > > /* This shouldn't harm even if the voltages weren't updated earlier */ > > - if (!IS_ERR(old_opp)) > > - _set_opp_voltage(dev, reg, old_opp->u_volt, > > - old_opp->u_volt_min, old_opp->u_volt_max); > > + if (old_u_volt) { > > What if old_u_volt == 0 is valid? How can that be valid ? > We could have another variable > like 'valid' or something that we use to figure out if we should > set values instead. Then this isn't a potential pitfall. I can do that but just wanted to know if we need that or not. -- viresh