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

  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: 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.