From: Rajendra Nayak rnayak@codeaurora.org
dev_pm_opp_set_rate() can now be called with freq = 0 in order to either drop performance or bandwidth votes or to disable regulators on platforms which support them.
In such cases, a subsequent call to dev_pm_opp_set_rate() with the same frequency ends up returning early because 'old_freq == freq'
Instead make it fall through and put back the dropped performance and bandwidth votes and/or enable back the regulators.
Cc: v5.3+ stable@vger.kernel.org # v5.3+ Fixes: cd7ea582 ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes") Reported-by: Sajida Bhanu sbhanu@codeaurora.org Reviewed-by: Sibi Sankar sibis@codeaurora.org Reported-by: Matthias Kaehlcke mka@chromium.org Tested-by: Matthias Kaehlcke mka@chromium.org Signed-off-by: Rajendra Nayak rnayak@codeaurora.org [ Viresh: Don't skip clk_set_rate() and massaged changelog ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org --- Hi Rajendra,
I wasn't able to test this stuff, please give it a try. I have simplified your patch and cleaned up a bunch of stuff as well.
drivers/opp/core.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/opp/core.c b/drivers/opp/core.c index bdb028c7793d..9668ea04cc80 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -934,10 +934,13 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
/* Return early if nothing to do */ if (old_freq == freq) { - dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", - __func__, freq); - ret = 0; - goto put_opp_table; + if (!opp_table->required_opp_tables && !opp_table->regulators && + !opp_table->paths) { + dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", + __func__, freq); + ret = 0; + goto put_opp_table; + } }
/*
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes").
The bot has tested the following trees: v5.8.1, v5.7.15, v5.4.58.
v5.8.1: Build OK! v5.7.15: Build failed! Errors: drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths'
v5.4.58: Build failed! Errors: drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths'
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
On 19-08-20, 23:56, Sasha Levin wrote:
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes").
The bot has tested the following trees: v5.8.1, v5.7.15, v5.4.58.
v5.8.1: Build OK! v5.7.15: Build failed! Errors: drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths'
v5.4.58: Build failed! Errors: drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths'
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
We probably need to send different versions for those kernel versions.
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes").
The bot has tested the following trees: v5.8.2, v5.7.16, v5.4.59.
v5.8.2: Build OK! v5.7.16: Build failed! Errors: drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths'
v5.4.59: Build failed! Errors: drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths'
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
On 26-08-20, 13:54, Sasha Levin wrote:
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes").
The bot has tested the following trees: v5.8.2, v5.7.16, v5.4.59.
v5.8.2: Build OK! v5.7.16: Build failed! Errors: drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:849:17: error: 'struct opp_table' has no member named 'paths'
v5.4.59: Build failed! Errors: drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: ‘struct opp_table’ has no member named ‘paths’ drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths' drivers/opp/core.c:847:17: error: 'struct opp_table' has no member named 'paths'
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
I have already sent the right fix for stable.
https://lore.kernel.org/lkml/31f315cf2b0c4afd60b07b7121058dcaa6e4afa1.159826...
linux-stable-mirror@lists.linaro.org