Thread (37 messages) 37 messages, 5 authors, 2017-01-21

Re: [PATCH 02/12] PM / OPP: Add 'struct kref' to OPP table

From: Viresh Kumar <viresh.kumar@linaro.org>
Date: 2017-01-10 04:23:24
Also in: lkml

On 09-01-17, 15:36, Stephen Boyd wrote:
On 12/07, Viresh Kumar wrote:
quoted
@@ -894,8 +895,36 @@ static void _kfree_device_rcu(struct rcu_head *head)
 	kfree_rcu(opp_table, rcu_head);
 }
 
-static void _free_opp_table(struct opp_table *opp_table)
+void _get_opp_table_kref(struct opp_table *opp_table)
 {
+	kref_get(&opp_table->kref);
+}
+
+struct opp_table *dev_pm_opp_get_opp_table(struct device *dev)
+{
+	struct opp_table *opp_table;
+
+	/* Hold our table modification lock here */
+	mutex_lock(&opp_table_lock);
+
+	opp_table = _find_opp_table(dev);
+	if (!IS_ERR(opp_table)) {
+		_get_opp_table_kref(opp_table);
It seems odd to have _get_opp_table_kref() take a pointer to
increment a kref on.
This function is provided for better readability and passing opp_table to it is
the only option I had :)
It would be better to have _find_opp_table()
return the pointer with the reference already taken so that we
don't have to update callers with reference grabbing calls.
Typically if a function returns a reference counted pointer the
reference counting has already been done.
Absolutely, but that happens with later patches in the series. I couldn't have
done it now, as something or the other would have broken.

-- 
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