On 08-12-20, 07:22, Nicola Mazzucato wrote: > On 12/8/20 5:50 AM, Viresh Kumar wrote: > > On 02-12-20, 17:23, Nicola Mazzucato wrote: > >> nr_opp = dev_pm_opp_get_opp_count(cpu_dev); > >> if (nr_opp <= 0) { > >> - dev_dbg(cpu_dev, "OPP table is not ready, deferring probe\n"); > >> - ret = -EPROBE_DEFER; > >> - goto out_free_opp; > >> + ret = handle->perf_ops->device_opps_add(handle, cpu_dev); > >> + if (ret) { > >> + dev_warn(cpu_dev, "failed to add opps to the device\n"); > >> + goto out_free_cpumask; > >> + } > >> + > >> + ret = dev_pm_opp_set_sharing_cpus(cpu_dev, opp_shared_cpus); > >> + if (ret) { > >> + dev_err(cpu_dev, "%s: failed to mark OPPs as shared: %d\n", > >> + __func__, ret); > >> + goto out_free_cpumask; > >> + } > >> + > > > > Why do we need to call above two after calling > > dev_pm_opp_get_opp_count() ? > > Sorry, I am not sure to understand your question here. If there are no opps for > a device we want to add them to it Earlier we used to call handle->perf_ops->device_opps_add() and dev_pm_opp_set_sharing_cpus() before calling dev_pm_opp_get_opp_count(), why is the order changed now ? > otherwise no need as they would be duplicated. I am not sure why they would be duplicated in your case. I though device_opps_add() is responsible for dynamically adding the OPPs here. > > And we don't check the return value of > > the below call anymore, moreover we have to call it twice now. > > This second get_opp_count is required such that we register em with the correct > opp number after having added them. Without this the opp_count would not be correct. What if the count is still 0 ? What about deferred probe we were doing earlier ? -- viresh