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