From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> To: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Ulf Hansson <ulf.hansson@linaro.org>, "linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>, Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>, Kevin Hilman <khilman@linaro.org>, Geert Uytterhoeven <geert+renesas@glider.be>, Dmitry Torokhov <dmitry.torokhov@gmail.com>, Russell King <linux@arm.linux.org.uk>, Mark Brown <broonie@kernel.org>, Wolfram Sang <wsa@the-dreams.de>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org> Subject: Re: [PATCH] driver core / PM: Add callbacks for PM domain initialization/cleanup Date: Thu, 19 Mar 2015 14:29:07 +0100 [thread overview] Message-ID: <20150319132907.GA3707@kroah.com> (raw) In-Reply-To: <2317791.ICLpdqLgyu@vostro.rjw.lan> On Wed, Mar 18, 2015 at 04:02:11PM +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > If PM domains are in use, it may be necessary to prepare the code > handling a PM domain for driver probing. For example, in some > cases device drivers rely on the ability to power on the devices > with the help of the IO runtime PM framework and the PM domain > code needs to be ready for that. Also, if that code has not been > fully initialized yet, the driver probing should be deferred. > > Moreover, after the probing is complete, it may be necessary to > put the PM domain in question into the state reflecting the current > needs of the devices in it, for example, to prevent power from being > drawn in vain. > > For these reasons, introduce new PM domain callbacks, ->activate > and ->sync, called, respectively, before probing for a device > driver and after the probing has been completed. > > That is not sufficient, however, because the device's PM domain > pointer has to be populated for the ->activate callback to be > executed, so setting it in bus type ->probe callback routines > would be too late. Also, there are bus types where PM domains > are not used at all and the core should not attempt to set the > pm_domain pointer for the devices on those buses. > > To overcome that difficulty, introduce two new bus type > callbacks, ->init and ->release, called by bus_add_device() and > bus_remove_device(), respectively. That will allow ->init to > be used to populate the pm_domain pointer for the bus types > that want to do that and ->release will be useful for any > cleanup that may be necessary after removing a device that > was part of a PM domain. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > > It occured to me that we might want to ->sync regardless of whether or > not the probing had been succenssful, so I changed the code in > really_probe() along these lines. Please let me know if that's > not OK. > > --- > drivers/base/bus.c | 12 +++++++++++- > drivers/base/dd.c | 20 ++++++++++++++------ > include/linux/device.h | 5 +++++ > include/linux/pm.h | 6 ++++++ > 4 files changed, 36 insertions(+), 7 deletions(-) > > Index: linux-pm/drivers/base/bus.c > =================================================================== > --- linux-pm.orig/drivers/base/bus.c > +++ linux-pm/drivers/base/bus.c > @@ -509,10 +509,15 @@ int bus_add_device(struct device *dev) > int error = 0; > > if (bus) { > + if (bus->init) { > + error = bus->init(dev); > + if (error) > + goto out_put; > + } This doesn't make sense to me. A bus just called bus_add_device, it can do whatever it wanted to right before calling this function, no need for another callback. > pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(dev)); > error = device_add_attrs(bus, dev); > if (error) > - goto out_put; > + goto out_release; > error = device_add_groups(dev, bus->dev_groups); > if (error) > goto out_groups; > @@ -534,6 +539,9 @@ out_groups: > device_remove_groups(dev, bus->dev_groups); > out_id: > device_remove_attrs(bus, dev); > +out_release: > + if (bus->release) > + bus->release(dev); > out_put: > bus_put(dev->bus); > return error; > @@ -597,6 +605,8 @@ void bus_remove_device(struct device *de > device_remove_groups(dev, dev->bus->dev_groups); > if (klist_node_attached(&dev->p->knode_bus)) > klist_del(&dev->p->knode_bus); > + if (bus->release) > + bus->release(dev); Same with release(), this happens when a bus wants to remove a device, it controls this, why have a callback right away? These both shouldn't be needed. sorry if I missed this before, I hadn't noticed these callbacks in previous patches but I wasn't paying much attention. thanks, greg k-h
WARNING: multiple messages have this Message-ID (diff)
From: gregkh@linuxfoundation.org (Greg Kroah-Hartman) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH] driver core / PM: Add callbacks for PM domain initialization/cleanup Date: Thu, 19 Mar 2015 14:29:07 +0100 [thread overview] Message-ID: <20150319132907.GA3707@kroah.com> (raw) In-Reply-To: <2317791.ICLpdqLgyu@vostro.rjw.lan> On Wed, Mar 18, 2015 at 04:02:11PM +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > If PM domains are in use, it may be necessary to prepare the code > handling a PM domain for driver probing. For example, in some > cases device drivers rely on the ability to power on the devices > with the help of the IO runtime PM framework and the PM domain > code needs to be ready for that. Also, if that code has not been > fully initialized yet, the driver probing should be deferred. > > Moreover, after the probing is complete, it may be necessary to > put the PM domain in question into the state reflecting the current > needs of the devices in it, for example, to prevent power from being > drawn in vain. > > For these reasons, introduce new PM domain callbacks, ->activate > and ->sync, called, respectively, before probing for a device > driver and after the probing has been completed. > > That is not sufficient, however, because the device's PM domain > pointer has to be populated for the ->activate callback to be > executed, so setting it in bus type ->probe callback routines > would be too late. Also, there are bus types where PM domains > are not used at all and the core should not attempt to set the > pm_domain pointer for the devices on those buses. > > To overcome that difficulty, introduce two new bus type > callbacks, ->init and ->release, called by bus_add_device() and > bus_remove_device(), respectively. That will allow ->init to > be used to populate the pm_domain pointer for the bus types > that want to do that and ->release will be useful for any > cleanup that may be necessary after removing a device that > was part of a PM domain. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > > It occured to me that we might want to ->sync regardless of whether or > not the probing had been succenssful, so I changed the code in > really_probe() along these lines. Please let me know if that's > not OK. > > --- > drivers/base/bus.c | 12 +++++++++++- > drivers/base/dd.c | 20 ++++++++++++++------ > include/linux/device.h | 5 +++++ > include/linux/pm.h | 6 ++++++ > 4 files changed, 36 insertions(+), 7 deletions(-) > > Index: linux-pm/drivers/base/bus.c > =================================================================== > --- linux-pm.orig/drivers/base/bus.c > +++ linux-pm/drivers/base/bus.c > @@ -509,10 +509,15 @@ int bus_add_device(struct device *dev) > int error = 0; > > if (bus) { > + if (bus->init) { > + error = bus->init(dev); > + if (error) > + goto out_put; > + } This doesn't make sense to me. A bus just called bus_add_device, it can do whatever it wanted to right before calling this function, no need for another callback. > pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(dev)); > error = device_add_attrs(bus, dev); > if (error) > - goto out_put; > + goto out_release; > error = device_add_groups(dev, bus->dev_groups); > if (error) > goto out_groups; > @@ -534,6 +539,9 @@ out_groups: > device_remove_groups(dev, bus->dev_groups); > out_id: > device_remove_attrs(bus, dev); > +out_release: > + if (bus->release) > + bus->release(dev); > out_put: > bus_put(dev->bus); > return error; > @@ -597,6 +605,8 @@ void bus_remove_device(struct device *de > device_remove_groups(dev, dev->bus->dev_groups); > if (klist_node_attached(&dev->p->knode_bus)) > klist_del(&dev->p->knode_bus); > + if (bus->release) > + bus->release(dev); Same with release(), this happens when a bus wants to remove a device, it controls this, why have a callback right away? These both shouldn't be needed. sorry if I missed this before, I hadn't noticed these callbacks in previous patches but I wasn't paying much attention. thanks, greg k-h
next prev parent reply other threads:[~2015-03-19 13:29 UTC|newest] Thread overview: 116+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-03-13 15:43 [PATCH 0/9] PM / Domains: Don't leave unused PM domains powered after ->probe() Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 1/9] PM / Domains: Add dev_pm_domain_get|put() APIs Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-14 1:31 ` Rafael J. Wysocki 2015-03-14 1:31 ` Rafael J. Wysocki 2015-03-16 9:26 ` Ulf Hansson 2015-03-16 9:26 ` Ulf Hansson 2015-03-17 3:01 ` Rafael J. Wysocki 2015-03-17 3:01 ` Rafael J. Wysocki 2015-03-17 9:27 ` Ulf Hansson 2015-03-17 9:27 ` Ulf Hansson 2015-03-17 14:45 ` Rafael J. Wysocki 2015-03-17 14:45 ` Rafael J. Wysocki 2015-03-17 14:25 ` Russell King - ARM Linux 2015-03-17 14:25 ` Russell King - ARM Linux 2015-03-18 1:16 ` Rafael J. Wysocki 2015-03-18 1:16 ` Rafael J. Wysocki 2015-03-17 14:40 ` Ulf Hansson 2015-03-17 14:40 ` Ulf Hansson 2015-03-18 1:09 ` Rafael J. Wysocki 2015-03-18 1:09 ` Rafael J. Wysocki 2015-03-18 13:41 ` Ulf Hansson 2015-03-18 13:41 ` Ulf Hansson 2015-03-18 15:02 ` [PATCH] driver core / PM: Add callbacks for PM domain initialization/cleanup Rafael J. Wysocki 2015-03-18 15:02 ` Rafael J. Wysocki 2015-03-19 8:49 ` Ulf Hansson 2015-03-19 8:49 ` Ulf Hansson 2015-03-19 11:45 ` Rafael J. Wysocki 2015-03-19 11:45 ` Rafael J. Wysocki 2015-03-19 13:16 ` Ulf Hansson 2015-03-19 13:16 ` Ulf Hansson 2015-03-19 13:29 ` Greg Kroah-Hartman [this message] 2015-03-19 13:29 ` Greg Kroah-Hartman 2015-03-19 14:21 ` Rafael J. Wysocki 2015-03-19 14:21 ` Rafael J. Wysocki 2015-03-19 14:12 ` Greg Kroah-Hartman 2015-03-19 14:12 ` Greg Kroah-Hartman 2015-03-19 15:24 ` Rafael J. Wysocki 2015-03-19 15:24 ` Rafael J. Wysocki 2015-03-19 14:20 ` Alan Stern 2015-03-19 14:20 ` Alan Stern 2015-03-19 14:45 ` Ulf Hansson 2015-03-19 14:45 ` Ulf Hansson 2015-03-19 15:44 ` Rafael J. Wysocki 2015-03-19 15:44 ` Rafael J. Wysocki 2015-03-19 15:37 ` Ulf Hansson 2015-03-19 15:37 ` Ulf Hansson 2015-03-19 16:04 ` Rafael J. Wysocki 2015-03-19 16:04 ` Rafael J. Wysocki 2015-03-19 15:48 ` Ulf Hansson 2015-03-19 15:48 ` Ulf Hansson 2015-03-19 16:18 ` Rafael J. Wysocki 2015-03-19 16:18 ` Rafael J. Wysocki 2015-03-19 16:58 ` [PATCH] driver core / PM: Add PM domain callbacks for device setup/cleanup Rafael J. Wysocki 2015-03-19 16:58 ` Rafael J. Wysocki 2015-03-19 21:51 ` [PATCH v2] " Rafael J. Wysocki 2015-03-19 21:51 ` Rafael J. Wysocki 2015-03-19 22:42 ` Dmitry Torokhov 2015-03-19 22:42 ` Dmitry Torokhov 2015-03-20 0:43 ` Rafael J. Wysocki 2015-03-20 0:43 ` Rafael J. Wysocki 2015-03-20 0:43 ` Dmitry Torokhov 2015-03-20 0:43 ` Dmitry Torokhov 2015-03-20 7:45 ` Ulf Hansson 2015-03-20 7:45 ` Ulf Hansson 2015-03-20 11:37 ` Ulf Hansson 2015-03-20 11:37 ` Ulf Hansson 2015-03-20 12:31 ` Rafael J. Wysocki 2015-03-20 12:31 ` Rafael J. Wysocki 2015-03-20 12:57 ` [PATCH v3] " Rafael J. Wysocki 2015-03-20 12:57 ` Rafael J. Wysocki 2015-03-20 12:59 ` Rafael J. Wysocki 2015-03-20 12:59 ` Rafael J. Wysocki 2015-03-20 13:44 ` Ulf Hansson 2015-03-20 13:44 ` Ulf Hansson 2015-03-21 0:09 ` Kevin Hilman 2015-03-21 0:09 ` Kevin Hilman 2015-03-21 1:00 ` Rafael J. Wysocki 2015-03-21 1:00 ` Rafael J. Wysocki 2015-03-22 11:46 ` Greg Kroah-Hartman 2015-03-22 11:46 ` Greg Kroah-Hartman 2015-03-19 14:46 ` [PATCH] driver core / PM: Add callbacks for PM domain initialization/cleanup Geert Uytterhoeven 2015-03-19 14:46 ` Geert Uytterhoeven 2015-03-18 15:09 ` [PATCH 1/9] PM / Domains: Add dev_pm_domain_get|put() APIs Rafael J. Wysocki 2015-03-18 15:09 ` Rafael J. Wysocki 2015-03-13 15:43 ` [PATCH 2/9] PM / Domains: Enable genpd to support ->get|put() callbacks Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-16 2:11 ` Chao 2015-03-16 2:11 ` [PATCH " Chao 2015-03-13 15:43 ` [PATCH 3/9] amba: Keep PM domain powered during ->probe() Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 16:03 ` Russell King - ARM Linux 2015-03-13 16:03 ` Russell King - ARM Linux 2015-03-16 8:37 ` Ulf Hansson 2015-03-16 8:37 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 4/9] drivercore / platform: " Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 5/9] i2c: core: " Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 6/9] spi: " Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 7/9] mmc: core: Attach PM domain prior probing of SDIO func driver Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-17 5:04 ` Aaron Lu 2015-03-17 5:04 ` Aaron Lu 2015-03-13 15:43 ` [PATCH 8/9] mmmc: core: Keep PM domain powered during ->probe() " Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-13 16:10 ` Russell King - ARM Linux 2015-03-13 16:10 ` Russell King - ARM Linux 2015-03-16 8:24 ` Ulf Hansson 2015-03-16 8:24 ` Ulf Hansson 2015-03-13 15:43 ` [PATCH 9/9] Revert "PM / Domains: Power on the PM domain right after attach completes" Ulf Hansson 2015-03-13 15:43 ` Ulf Hansson 2015-03-16 9:07 ` Geert Uytterhoeven 2015-03-16 9:07 ` Geert Uytterhoeven
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=20150319132907.GA3707@kroah.com \ --to=gregkh@linuxfoundation.org \ --cc=broonie@kernel.org \ --cc=dmitry.torokhov@gmail.com \ --cc=geert+renesas@glider.be \ --cc=khilman@linaro.org \ --cc=len.brown@intel.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=pavel@ucw.cz \ --cc=rjw@rjwysocki.net \ --cc=ulf.hansson@linaro.org \ --cc=wsa@the-dreams.de \ /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: linkBe 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.