From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Len Brown <len.brown@intel.com>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Kevin Hilman <khilman@linaro.org>
Subject: Re: [PATCH 3/9] pm: domains: sync runtime PM status with PM domains after probe
Date: Fri, 13 Mar 2015 10:14:34 +0000 [thread overview]
Message-ID: <20150313101434.GD8656@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CAPDyKFrcjfLXCjLL8SGJUDz6ErROW=B8oDEg0eRPA92=m-dRQA@mail.gmail.com>
On Fri, Mar 13, 2015 at 10:30:59AM +0100, Ulf Hansson wrote:
> On 12 March 2015 at 19:31, Russell King <rmk+kernel@arm.linux.org.uk> wrote:
> > Synchronise the PM domain status with runtime PM's status after a
> > platform device has been probed. This augments the solution in commit
> > 2ed127697eb1 ("PM / Domains: Power on the PM domain right after attach
> > completes").
> >
> > The above commit added a call to power up the PM domain when a device
> > attaches to the domain in order to match the behaviour required by
> > drivers that make no use of runtime PM. The assumption is that the
> > device driver will cause a runtime PM transition, which will synchronise
> > the PM domain state with the runtime PM state.
> >
> > However, by default, runtime PM will assume that the device is initially
> > suspended, and some drivers may make use of this should they not need to
> > touch the hardware during probe.
> >
> > In order to allow such drivers, trigger the PM domain code to check
> > whether the PM domain can be suspended after the probe function, undoing
> > the effect of the power-on prior to the probe.
> >
> > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> > ---
> > drivers/base/platform.c | 2 ++
>
> Don't we need this for more buses than the platform bus?
As you very well know, only the platform bus does this automatic binding
of a PM domain based on OF - something that you yourself were involved in
adding (your sign-off is on the patch adding it, so I assume that you
reviewed that patch as thoroughly as you seem to be reviewing mine) which
is the cause of my problems.
> > drivers/base/power/common.c | 15 +++++++++++++++
> > drivers/base/power/domain.c | 23 +++++++++++++++++++++++
> > include/linux/pm.h | 1 +
> > include/linux/pm_domain.h | 4 ++++
> > 5 files changed, 45 insertions(+)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 9421fed40905..552d1affc060 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -512,6 +512,8 @@ static int platform_drv_probe(struct device *_dev)
> > ret = drv->probe(dev);
> > if (ret)
> > dev_pm_domain_detach(_dev, true);
> > + else
> > + dev_pm_domain_sync(_dev);
> > }
> >
> > if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) {
> > diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
> > index b0f138806bbc..8c739a14d3c7 100644
> > --- a/drivers/base/power/common.c
> > +++ b/drivers/base/power/common.c
> > @@ -134,3 +134,18 @@ void dev_pm_domain_detach(struct device *dev, bool power_off)
> > dev->pm_domain->detach(dev, power_off);
> > }
> > EXPORT_SYMBOL_GPL(dev_pm_domain_detach);
> > +
> > +/**
> > + * dev_pm_domain_sync - synchronise the PM domain state with its devices
> > + * @dev: device corresponding with domain
> > + *
> > + * Synchronise the PM domain state with the recently probed device, which
> > + * may be in a variety of PM states. This ensures that a device which
> > + * enables runtime PM in suspended state, and never transitions to active
> > + * in its probe handler is properly suspended after the probe.
> > + */
> > +void dev_pm_domain_sync(struct device *dev)
> > +{
> > + if (dev->pm_domain && dev->pm_domain->sync)
> > + dev->pm_domain->sync(dev);
> > +}
>
> This is more of a taste and flavour comment, regarding the design approach.
>
> To address the issue which @subject patch does, and together with the
> original problem, which was about making sure a PM domain stays
> powered during probe, that to me seems like a perfect match for a
> get/put API.
>
> The current solution from commit 2ed127697eb1 ("PM / Domains: Power on
> the PM domain right after attach completes"), is to me just a hacky
> workaround (which obviously wasn't the proper solution) . $subject
> patch follows that approach.
>
> What do you think of using a get/put approach instead, that would also
> give us nice symmetry of the API. As you know I have patches available
> for this, I am happy to post them if needed.
What I think you're proposing is nothing less than a total rewrite of the
PM domain code.
If that's what it's going to take to get this stuff in, then I'm just not
interested in persuing this anymore, sorry. I don't have the time and
effort for that - something that people well know when they send me emails
that go unanswered...
I'm just trying to fix the problem which you created - and this is the way
which was discussed and settled upon. If you _now_ want a different
approach, that's up to _you_ to implement. Stop wasting my time.
> > diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> > index 11a1023fa64a..13ae3355dff7 100644
> > --- a/drivers/base/power/domain.c
> > +++ b/drivers/base/power/domain.c
> > @@ -2157,6 +2157,28 @@ static void genpd_dev_pm_detach(struct device *dev, bool power_off)
> > genpd_queue_power_off_work(pd);
> > }
> >
> > +static void genpd_dev_pm_sync(struct device *dev)
> > +{
> > + struct generic_pm_domain *pd = NULL, *gpd;
> > +
> > + if (!dev->pm_domain)
> > + return;
> > +
> > + mutex_lock(&gpd_list_lock);
> > + list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
> > + if (&gpd->domain == dev->pm_domain) {
> > + pd = gpd;
> > + break;
> > + }
> > + }
> > + mutex_unlock(&gpd_list_lock);
>
> Walking through the gpd list seems a bit "heavy". Can't we just expect
> the caller to have a valid generic_pm_domain pointer for its device?
No you can't. See the second patch in this series. dev->pm_domain can
contain other stuff which isn't a generic_pm_domain. generic_pm_domain
is just one instance of a pm_domain implementation. Others exist.
I would have assumed you would know these details as you have decided to
co-maintain this code, or if not, you'd be prepared to audit the kernel
to find out what might be in dev->pm_domain so that you have due diligence
before commenting on something you clearly know nothing about...
What I find even _more_ unacceptable is that you are question this, but
you didn't question the exact same code which was part of Tomasz Figa's
patch to add the OF-based PM domain code. On the face of it, this
strikes of double standards - somehow I have to justify my code more
than other people do.
--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
next prev parent reply other threads:[~2015-03-13 10:14 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-12 18:30 [FOR DISCUSSION 0/9] Dove PMU support Russell King - ARM Linux
2015-03-12 18:30 ` [PATCH 1/9] pm: domains: quieten down generic pm domains Russell King
2015-03-13 8:46 ` Ulf Hansson
2015-03-13 15:57 ` Kevin Hilman
2015-03-12 18:31 ` [PATCH 2/9] pm: domains: avoid potential oops in pm_genpd_remove_device() Russell King
2015-03-13 8:56 ` Ulf Hansson
2015-03-13 9:20 ` Russell King - ARM Linux
2015-03-13 12:45 ` Geert Uytterhoeven
2015-03-14 1:27 ` Rafael J. Wysocki
2015-03-13 13:23 ` Russell King - ARM Linux
2015-03-13 16:33 ` Kevin Hilman
2015-03-13 16:58 ` Russell King - ARM Linux
2015-03-12 18:31 ` [PATCH 3/9] pm: domains: sync runtime PM status with PM domains after probe Russell King
2015-03-12 23:25 ` Rafael J. Wysocki
2015-03-13 9:30 ` Ulf Hansson
2015-03-13 10:14 ` Russell King - ARM Linux [this message]
2015-03-13 10:42 ` Ulf Hansson
2015-03-13 13:39 ` Russell King - ARM Linux
2015-03-13 16:45 ` Kevin Hilman
2015-03-13 16:22 ` [FOR DISCUSSION 0/10] Dove PMU support Russell King - ARM Linux
2015-03-13 16:23 ` [PATCH 01/10] pm: domains: quieten down generic pm domains Russell King
2015-03-13 17:10 ` Kevin Hilman
2015-03-13 16:23 ` [PATCH 02/10] pm: domains: factor out code to get the generic PM domain from a struct device Russell King
2015-03-13 17:20 ` Kevin Hilman
2015-03-13 17:35 ` Russell King - ARM Linux
2015-03-13 16:23 ` [PATCH 03/10] pm: domains: avoid potential oops in pm_genpd_remove_device() Russell King
2015-03-13 17:28 ` Kevin Hilman
[not found] ` <20150312183020.GU8656-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2015-03-13 11:57 ` [FOR DISCUSSION 0/9] Dove PMU support Arnd Bergmann
2015-03-13 12:11 ` Russell King - ARM Linux
2015-03-13 12:26 ` Arnd Bergmann
2015-03-13 12:32 ` Russell King - ARM Linux
2015-03-13 12:47 ` Arnd Bergmann
2015-03-13 16:23 ` [PATCH 04/10] pm: domains: sync runtime PM status with PM domains after probe Russell King
[not found] ` <E1YWSN5-0006G5-Ld-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
2015-03-13 17:33 ` Kevin Hilman
2015-03-19 21:59 ` [FOR DISCUSSION 0/9] Dove PMU support Rafael J. Wysocki
2015-03-19 22:02 ` Rafael J. Wysocki
2015-03-20 12:16 ` Russell King - ARM Linux
2015-03-20 12:44 ` Rafael J. Wysocki
2015-03-20 17:19 ` Russell King - ARM Linux
2015-03-20 17:20 ` [PATCH 1/3] pm: domains: quieten down generic pm domains Russell King
2015-03-20 17:20 ` [PATCH 2/3] pm: domains: factor out code to get the generic PM domain from a struct device Russell King
2015-03-23 13:28 ` Ulf Hansson
2015-03-23 15:17 ` Russell King - ARM Linux
2015-03-24 0:29 ` Rafael J. Wysocki
2015-03-26 15:20 ` Russell King - ARM Linux
2015-03-26 16:00 ` Russell King - ARM Linux
2015-03-20 17:20 ` [PATCH 3/3] pm: domains: avoid potential oops in pm_genpd_remove_device() Russell King
2015-03-23 13:32 ` Ulf Hansson
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=20150313101434.GD8656@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=andrew@lunn.ch \
--cc=gregkh@linuxfoundation.org \
--cc=jason@lakedaemon.net \
--cc=khilman@linaro.org \
--cc=len.brown@intel.com \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=sebastian.hesselbarth@gmail.com \
--cc=ulf.hansson@linaro.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).