FAILED: patch "[PATCH] PM / OPP: Don't use OPP structure outside of rcu protected" failed to apply to 4.8-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 4.8-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
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: [PATCH] PM / OPP: Don't use OPP structure outside of rcu protected
section
The OPP structure must not be used out of the rcu protected section. Cache the values to be used in separate variables instead.
Cc 4.6+ <[email protected]> # 4.6+
Signed-off-by Viresh Kumar <[email protected]>
Reviewed-by Stephen Boyd <[email protected]>
Tested-by Dave Gerlach <[email protected]>
Signed-off-by Rafael J. Wysocki <[email protected]>
drivers/base/power/opp/core.c +13 -3
@@ -584,6 +584,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)struct 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 *dev, unsigned long target_freq)return 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 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_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; }