[PATCH] opp: convert dev_warn() to dev_dbg() for duplicate OPPs
Viresh Kumar
viresh.kumar at linaro.org
Tue Nov 25 02:37:35 PST 2014
On 24 November 2014 at 21:44, Paul E. McKenney
<paulmck at linux.vnet.ibm.com> wrote:
> As Rafael says, if opp is reachable by RCU readers, you cannot just
> immediately kfree() it. Immediately kfree()ing it like this -will-
> cause your RCU readers to see freed memory, which, as you noted, can
> cause crashes.
In order to reply you at some level, I tried going through RCU documentation
today before replying anymore. And yes I understood this part.
> Except that srcu_notifier_call_chain() involves SRCU readers. So,
> unless I am confused, you instead need something like this:
>
> static void kfree_opp_rcu(struct rcu_head *rhp)
> {
> struct device_opp *opp = container_of(rhp, struct device_opp, opp_list);
>
> kfree(opp);
> }
>
> Then replace the above kfree() by:
>
> call_srcu(&opp->rcu, kfree_opp_rcu);
Correct. But you missed the srcu which should be the first argument here :)
> This will require adding the following to struct device_opp:
>
> struct rcu_head rcu;
We were freeing struct dev_pm_opp, and so I believe you
wanted me to add it there? Its already there.
> All that said, I do not claim to understand the OPP code, so please take
> the above suggested changes with a grain of salt. And if you let me know
> where I am confused, I should be able to offer better suggestions.
Thanks for your suggestions. I have sent the patch to list and cc'd you on
the relevant ones. Would be great if you can review the rcu part there.
--
viresh
More information about the linux-arm-kernel
mailing list