• Viresh Kumar's avatar
    cpufreq: scpi/scmi: Fix freeing of dynamic OPPs · 1690d8bb
    Viresh Kumar authored
    Since the commit 2a4eb735 "OPP: Don't remove dynamic OPPs from
    _dev_pm_opp_remove_table()", dynamically created OPP aren't
    automatically removed anymore by dev_pm_opp_cpumask_remove_table(). This
    affects the scpi and scmi cpufreq drivers which no longer free OPPs on
    failures or on invocations of the policy->exit() callback.
    
    Create a generic OPP helper dev_pm_opp_remove_all_dynamic() which can be
    called from these drivers instead of dev_pm_opp_cpumask_remove_table().
    
    In dev_pm_opp_remove_all_dynamic(), we need to make sure that the
    opp_list isn't getting accessed simultaneously from other parts of the
    OPP core while the helper is freeing dynamic OPPs, i.e. we can't drop
    the opp_table->lock while traversing through the OPP list. And to
    accomplish that, this patch also creates _opp_kref_release_unlocked()
    which can be called from this new helper with the opp_table lock already
    held.
    
    Cc: 4.20 <stable@vger.kernel.org> # v4.20
    Reported-by: 's avatarValentin Schneider <valentin.schneider@arm.com>
    Fixes: 2a4eb735 "OPP: Don't remove dynamic OPPs from _dev_pm_opp_remove_table()"
    Signed-off-by: 's avatarViresh Kumar <viresh.kumar@linaro.org>
    Tested-by: 's avatarValentin Schneider <valentin.schneider@arm.com>
    Reviewed-by: 's avatarSudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: 's avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    1690d8bb
Name
Last commit
Last update
..
Kconfig Loading commit data...
Makefile Loading commit data...
core.c Loading commit data...
cpu.c Loading commit data...
debugfs.c Loading commit data...
of.c Loading commit data...
opp.h Loading commit data...
ti-opp-supply.c Loading commit data...