linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@codeaurora.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Rafael Wysocki <rjw@rjwysocki.net>,
	Viresh Kumar <vireshk@kernel.org>, Nishanth Menon <nm@ti.com>,
	linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org,
	Vincent Guittot <vincent.guittot@linaro.org>
Subject: Re: [PATCH 07/10] PM / OPP: Don't allocate OPP table from _opp_allocate()
Date: Wed, 7 Dec 2016 14:05:25 -0800	[thread overview]
Message-ID: <20161207220525.GB5423@codeaurora.org> (raw)
In-Reply-To: <20161207041744.GF31255@vireshk-i7>

On 12/07, Viresh Kumar wrote:
> On 06-12-16, 17:02, Stephen Boyd wrote:
> > On 12/06, Viresh Kumar wrote:
> > > diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
> > > index ef114cf9edcd..6bcbb64a5582 100644
> > > --- a/drivers/base/power/opp/core.c
> > > +++ b/drivers/base/power/opp/core.c
> > > @@ -1030,33 +1029,24 @@ void dev_pm_opp_remove(struct device *dev, unsigned long freq)
> > >  EXPORT_SYMBOL_GPL(dev_pm_opp_remove);
> > >  
> > >  struct dev_pm_opp *_opp_allocate(struct device *dev,
> > > -				 struct opp_table **opp_table)
> > > +				 struct opp_table *opp_table)
> > 
> > Please call it table instead.
> 
> Sure.
> 
> > >  {
> > >  	struct dev_pm_opp *opp;
> > >  	int count, supply_size;
> > > -	struct opp_table *table;
> > > -
> > > -	table = _add_opp_table(dev);
> > 
> > Is this the only user of dev? Why do we keep passing dev to this
> > function then?
> 
> Because we are still working with struct list_dev, which needs to save
> a pointer to dev. We may simplify that with later series though, not
> sure yet.

Sorry I don't understand. After this patch it looks like dev is
unused in the function because we delete the only user
_add_opp_table().

> 
> > > +int _opp_add_v1(struct opp_table *opp_table, struct device *dev,
> > > +		unsigned long freq, long u_volt, bool dynamic)
> > >  {
> > > -	struct opp_table *opp_table;
> > >  	struct dev_pm_opp *new_opp;
> > >  	unsigned long tol;
> > >  	int ret;
> > >  
> > > -	/* Hold our table modification lock here */
> > > -	mutex_lock(&opp_table_lock);
> > 
> > Can we have a mutex locked assertion here? Or a note in the
> > comments that we assume the opp table lock is held?
> 
> Done.
> 
> > > -
> > > -	new_opp = _opp_allocate(dev, &opp_table);
> > > -	if (!new_opp) {
> > > -		ret = -ENOMEM;
> > > -		goto unlock;
> > > -	}
> > > +	new_opp = _opp_allocate(dev, opp_table);
> > > +	if (!new_opp)
> > > +		return -ENOMEM;
> > >  
> > >  	/* populate the opp table */
> > >  	new_opp->rate = freq;
> > 
> > Also, now we call the srcu notifier chain with the opp_table_lock
> > held? That seems not so good. Do we need to drop it and reaquire
> > the lock across the table lock? Or perhaps we should rethink
> > widening the lock this much across the notifier.
> 
> Hmm, fair point but:
> - The OPP notifiers are used only by devfreq and no one else. So the
>   most common case of cpufreq will be just fine.
> - The lock is taken across only OPP_EVENT_ADD event and that doesn't
>   get called all the time. Normally it will happen only at boot (once
>   for each OPP) and that's it. I am not sure if we should actually
>   remove the notifier completely going forward.
> - Looking at devfreq implementation it seems that they are mostly
>   interested in the updates to the OPP nodes.
> - The later series (which I may post today as this one is reviewed
>   mostly), will simplify it a lot. The lock wouldn't be taken across
>   any big parts as we will use kref instead.
> - So, I would like to keep this patch as is as this is going to be
>   sorted out anyway.

I haven't looked at the next round of patches. If the lock is
still held across the notifier for OPP_EVENT_ADD then it would
seem that we should get some sort of lockdep splat if the
notified functions want to call back into the OPP code and that
takes the same lock we held across the notifier. Even if it would
work for the other notifiers that aren't OPP_EVENT_ADD, lockdep
wouldn't know that because of locking classes, hence the splat.
That's my only concern. Obviously if the locking is going away
then it's just a bisection hole problem that I'm willing to
ignore.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2016-12-07 22:05 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-06  9:15 [PATCH 00/10] PM / OPP: Fixes and cleanups Viresh Kumar
2016-12-06  9:15 ` [PATCH 01/10] PM / OPP: Fix memory leak while adding duplicate OPPs Viresh Kumar
2016-12-07  1:09   ` Stephen Boyd
2016-12-07  3:23     ` Viresh Kumar
2016-12-06  9:15 ` [PATCH 02/10] PM / OPP: Remove useless TODO Viresh Kumar
2016-12-07  1:10   ` Stephen Boyd
2016-12-07  3:24     ` Viresh Kumar
2016-12-06  9:15 ` [PATCH 03/10] PM / OPP: Rename _allocate_opp() to _opp_allocate() Viresh Kumar
2016-12-07  1:10   ` Stephen Boyd
2016-12-06  9:15 ` [PATCH 04/10] PM / OPP: Error out on failing to add static OPPs for v1 bindings Viresh Kumar
2016-12-07  1:17   ` Stephen Boyd
2016-12-07  3:25     ` Viresh Kumar
2016-12-07 21:13       ` Stephen Boyd
2016-12-08  3:30         ` Viresh Kumar
2016-12-08  6:39           ` Shawn Guo
2016-12-08  6:45             ` Viresh Kumar
2016-12-08 14:27               ` Shawn Guo
2016-12-08 14:47                 ` Viresh Kumar
2016-12-06  9:15 ` [PATCH 05/10] PM / OPP: Add light weight _opp_free() routine Viresh Kumar
2016-12-07  1:12   ` Stephen Boyd
2016-12-06  9:15 ` [PATCH 06/10] PM / OPP: Rename and split _dev_pm_opp_remove_table() Viresh Kumar
2016-12-07  1:19   ` Stephen Boyd
2016-12-06  9:15 ` [PATCH 07/10] PM / OPP: Don't allocate OPP table from _opp_allocate() Viresh Kumar
2016-12-07  1:02   ` Stephen Boyd
2016-12-07  4:17     ` Viresh Kumar
2016-12-07 22:05       ` Stephen Boyd [this message]
2016-12-08  3:45         ` Viresh Kumar
2016-12-22  0:43           ` Stephen Boyd
2016-12-06  9:16 ` [PATCH 08/10] PM / OPP: Rename dev_pm_opp_get_suspend_opp() and return OPP rate Viresh Kumar
2016-12-07  1:21   ` Stephen Boyd
2016-12-07  4:20     ` Viresh Kumar
2016-12-06  9:16 ` [PATCH 09/10] PM / OPP: Don't expose srcu_head to register notifiers Viresh Kumar
2016-12-07  1:22   ` Stephen Boyd
2016-12-06  9:16 ` [PATCH 10/10] PM / OPP: Split out part of _add_opp_table() and _remove_opp_table() Viresh Kumar
2016-12-07  1:24   ` Stephen Boyd
2016-12-07  4:25     ` Viresh Kumar
     [not found] ` <CGME20161206091647epcas4p1823f471816de0ef953123a8fbdac4b1f@epcas4p1.samsung.com>
2016-12-07  0:29   ` [PATCH 09/10] PM / OPP: Don't expose srcu_head to register notifiers MyungJoo Ham

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161207220525.GB5423@codeaurora.org \
    --to=sboyd@codeaurora.org \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=nm@ti.com \
    --cc=rjw@rjwysocki.net \
    --cc=vincent.guittot@linaro.org \
    --cc=viresh.kumar@linaro.org \
    --cc=vireshk@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).