On 12/8/20 7:26 AM, Viresh Kumar wrote: > 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 ? True. The order has changed to take into account the fact that when we have per-cpu + opp-shared, we don't need to add opps for devices which already have them. > >> 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. In case of per-cpu + opp-shared, with the "previous order" we would try to add opps to a device which already has them, in fact attempting to add duplicates. Nothing wrong with it, but a lot of warnings are thrown. > >>> 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 ? My assumption is to rely on the two above to fail if there was something wrong. For the deferred probe, I am not sure it is still a useful case to have, but I will let Sudeep have his view also on this. > Thanks Viresh, hope it's a bit more clear now. Nicola