All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  reply	other threads:[~2015-03-13 10:14 UTC|newest]

Thread overview: 125+ 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 ` 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-12 18:31 ` [PATCH 5/9] ARM: dove: create a proper PMU driver for power domains, PMU IRQs and resets Russell King
2015-03-13 12:07   ` Arnd Bergmann
2015-03-13 12:29     ` Russell King - ARM Linux
2015-03-13 12:42       ` Arnd Bergmann
2015-03-13 12:47         ` Russell King - ARM Linux
2015-03-13 15:08           ` Arnd Bergmann
2015-03-13 15:28             ` Russell King - ARM Linux
2015-03-13 15:36               ` Arnd Bergmann
2015-03-13 12:59         ` Russell King - ARM Linux
2015-03-12 18:31 ` [PATCH 6/9] ARM: dt: dove: add Dove PMU DT entry to dove.dtsi Russell King
2015-03-12 18:31   ` Russell King
2015-03-13 12:30   ` Thomas Petazzoni
2015-03-13 12:30     ` Thomas Petazzoni
2015-03-13 12:33     ` Russell King - ARM Linux
2015-03-13 12:33       ` Russell King - ARM Linux
2015-03-16 18:27   ` Gregory CLEMENT
2015-03-16 18:27     ` Gregory CLEMENT
2015-03-17 13:43     ` Russell King - ARM Linux
2015-03-17 13:43       ` Russell King - ARM Linux
2015-03-17 15:09       ` Sebastian Hesselbarth
2015-03-17 15:09         ` Sebastian Hesselbarth
2015-03-17 15:15         ` Russell King - ARM Linux
2015-03-17 15:15           ` Russell King - ARM Linux
2015-03-25  8:25         ` Linus Walleij
2015-03-25  8:25           ` Linus Walleij
2015-03-12 18:31 ` [PATCH 7/9] ARM: dt: dove: wire up RTC interrupt Russell King
2015-03-12 18:31   ` Russell King
2015-03-12 18:31 ` [PATCH 8/9] ARM: dt: dove: add video decoder power domain description Russell King
2015-03-12 18:31   ` Russell King
2015-03-12 18:31 ` [PATCH 9/9] ARM: dt: dove: add GPU " Russell King
2015-03-12 18:31   ` Russell King
     [not found] ` <20150312183020.GU8656-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2015-03-12 18:31   ` [PATCH 4/9] dt-bindings: add Marvell PMU documentation Russell King
     [not found]     ` <E1YW7t0-0003mE-My-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
2015-03-12 21:32       ` Rob Herring
     [not found]         ` <CAL_Jsq+R70GVsuig7Ebo49_MeneD_RZ=E0haTVsb_xFhTR7-pw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-12 21:42           ` Russell King - ARM Linux
2015-03-13 12:02       ` Arnd Bergmann
2015-03-13 11:57   ` [FOR DISCUSSION 0/9] Dove PMU support Arnd Bergmann
2015-03-13 11:57     ` Arnd Bergmann
2015-03-13 12:11     ` Russell King - ARM Linux
2015-03-13 12:11       ` Russell King - ARM Linux
2015-03-13 12:26       ` Arnd Bergmann
2015-03-13 12:26         ` Arnd Bergmann
2015-03-13 12:32         ` Russell King - ARM Linux
2015-03-13 12:32           ` Russell King - ARM Linux
2015-03-13 12:47           ` Arnd Bergmann
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
2015-03-13 16:23     ` Russell King
     [not found]     ` <E1YWSN5-0006G5-Ld-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
2015-03-13 17:33       ` Kevin Hilman
2015-03-13 17:33         ` 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 16:23   ` Russell King
2015-03-13 17:10   ` Kevin Hilman
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 16:23   ` Russell King
2015-03-13 17:20   ` Kevin Hilman
2015-03-13 17:20     ` Kevin Hilman
2015-03-13 17:35     ` Russell King - ARM Linux
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 16:23   ` Russell King
2015-03-13 17:28   ` Kevin Hilman
2015-03-13 17:28     ` Kevin Hilman
2015-03-13 16:23 ` [PATCH 05/10] dt-bindings: add Marvell PMU documentation Russell King
2015-03-13 16:23   ` Russell King
2015-03-17  0:28   ` Rob Herring
2015-03-17  0:28     ` Rob Herring
2015-03-13 16:23 ` [PATCH 06/10] ARM: dove: create a proper PMU driver for power domains, PMU IRQs and resets Russell King
2015-03-13 16:23 ` [PATCH 07/10] ARM: dt: dove: add Dove PMU DT entry to dove.dtsi Russell King
2015-03-13 16:23   ` Russell King
2015-03-13 16:23 ` [PATCH 08/10] ARM: dt: dove: wire up RTC interrupt Russell King
2015-03-13 16:23   ` Russell King
2015-03-13 16:24 ` [PATCH 09/10] ARM: dt: dove: add video decoder power domain description Russell King
2015-03-13 16:24   ` Russell King
2015-03-13 16:24 ` [PATCH 10/10] ARM: dt: dove: add GPU " Russell King
2015-03-13 16:24   ` Russell King
2015-03-19 21:59 ` [FOR DISCUSSION 0/9] Dove PMU support Rafael J. Wysocki
2015-03-19 21:59   ` Rafael J. Wysocki
2015-03-19 22:02   ` Rafael J. Wysocki
2015-03-19 22:02     ` Rafael J. Wysocki
2015-03-20 12:16     ` Russell King - ARM Linux
2015-03-20 12:16       ` Russell King - ARM Linux
2015-03-20 12:44       ` Rafael J. Wysocki
2015-03-20 12:44         ` Rafael J. Wysocki
2015-03-20 17:19         ` Russell King - ARM Linux
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             ` 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-20 17:20             ` Russell King
2015-03-23 13:28             ` Ulf Hansson
2015-03-23 13:28               ` Ulf Hansson
2015-03-23 15:17               ` Russell King - ARM Linux
2015-03-23 15:17                 ` Russell King - ARM Linux
2015-03-24  0:29                 ` Rafael J. Wysocki
2015-03-24  0:29                   ` Rafael J. Wysocki
2015-03-26 15:20                   ` Russell King - ARM Linux
2015-03-26 15:20                     ` Russell King - ARM Linux
2015-03-26 16:00                     ` 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-20 17:20             ` Russell King
2015-03-23 13:32             ` Ulf Hansson
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.