Thread (6 messages) 6 messages, 3 authors, 2016-07-25

[PATCH] PM / OPP: optimize dev_pm_opp_set_rate() a bit

From: viresh.kumar@linaro.org (Viresh Kumar)
Date: 2016-07-22 16:21:55
Also in: linux-pm, lkml

On 22-07-16, 20:42, Jisheng Zhang wrote:
quoted hunk ↗ jump to hunk
 static int _set_opp_voltage(struct device *dev, struct regulator *reg,
 			    unsigned long u_volt, unsigned long u_volt_min,
 			    unsigned long u_volt_max)
@@ -586,9 +565,24 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 		return -EINVAL;
 	}
 
-	clk = _get_opp_clk(dev);
-	if (IS_ERR(clk))
+	rcu_read_lock();
+
+	opp_table = _find_opp_table(dev);
+	if (IS_ERR(opp_table)) {
+		dev_err(dev, "%s: device opp doesn't exist\n", __func__);
+		rcu_read_unlock();
+		return PTR_ERR(opp_table);
+	}
+
+	clk = opp_table->clk;
+	if (IS_ERR(clk)) {
+		dev_err(dev, "%s: No clock available for the device\n",
+			__func__);
+		rcu_read_unlock();
 		return PTR_ERR(clk);
+	}
+
+	rcu_read_unlock();
It is not _safe_ to use opp_table pointer after the rcu_read_unlock()
here.

-- 
viresh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help