Patch "PM / OPP: Don't use OPP structure outside of rcu protected section" has been added to the 4.9-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
PM / OPP: Don't use OPP structure outside of rcu protected section
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pm-opp-don-t-use-opp-structure-outside-of-rcu-protected-section.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
dc39d06fcd7a4a82d72eae7b71e94e888b96d29eMon Sep 17 00:00:00 2001
From: Viresh Kumar <[email protected]>
Date: Thu, 1 Dec 2016 16:28:16 +0530
Subject: PM / OPP: Don't use OPP structure outside of rcu protected section
From: Viresh Kumar <[email protected]>
commit dc39d06fcd7a4a82d72eae7b71e94e888b96d29e upstream.
The OPP structure must not be used out of the rcu protected section. Cache the values to be used in separate variables instead.
--- drivers/base/power/opp/core.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
drivers/base/power/opp/core.c +13 -3
@@ -584,6 +584,7 @@ int dev_pm_opp_set_rate(struct device *dstruct clk *clk;unsigned long freq, old_freq;unsigned long u_volt, u_volt_min, u_volt_max; +unsigned long old_u_volt, old_u_volt_min, old_u_volt_max;int ret;if (unlikely (!target_freq)) {
@@ -633,6 +634,14 @@ int dev_pm_opp_set_rate(struct device *dreturn 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 @@ restore_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) { +_set_opp_voltage (dev, reg, old_u_volt, old_u_volt_min, + old_u_volt_max); + }return ret; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/pm-opp-don-t-use-opp-structure-outside-of-rcu-protected-section.patch queue-4.9/pm-opp-pass-opp_table-to-dev_pm_opp_put_regulator.patch