public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Linux-pm mailing list <linux-pm@lists.linux-foundation.org>
Subject: Re: [PATCH] PM: allow runtime_suspend methods to call pm_schedule_suspend
Date: Fri, 19 Mar 2010 22:25:59 +0100	[thread overview]
Message-ID: <201003192225.59192.rjw@sisk.pl> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1003191149150.1300-100000@iolanthe.rowland.org>

On Friday 19 March 2010, Alan Stern wrote:
> This patch (as1361) changes the runtime PM interface slightly; it
> allows suspend requests to be scheduled while the runtime_suspend
> method is running.  If the method succeeds then the scheduled request
> is cancelled, whereas if the method fails then an idle notification is
> sent only if no request was scheduled.
> 
> Being able to schedule suspend requests from within a runtime_suspend
> method is useful for drivers that need to test for idleness and
> suspend the device all while holding a single spinlock, or for drivers
> that want to check for idleness by polling.
> 
> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>

Looks good.

Do you need it in 2.6.34 or is it sufficient to queue it up for 2.6.35 (I'd prefer so)?

Rafael


> ---
> 
> Index: usb-2.6/drivers/base/power/runtime.c
> ===================================================================
> --- usb-2.6.orig/drivers/base/power/runtime.c
> +++ usb-2.6/drivers/base/power/runtime.c
> @@ -229,14 +229,16 @@ int __pm_runtime_suspend(struct device *
>  
>  	if (retval) {
>  		dev->power.runtime_status = RPM_ACTIVE;
> -		pm_runtime_cancel_pending(dev);
> -
>  		if (retval == -EAGAIN || retval == -EBUSY) {
> -			notify = true;
> +			if (dev->power.timer_expires == 0)
> +				notify = true;
>  			dev->power.runtime_error = 0;
> +		} else {
> +			pm_runtime_cancel_pending(dev);
>  		}
>  	} else {
>  		dev->power.runtime_status = RPM_SUSPENDED;
> +		pm_runtime_deactivate_timer(dev);
>  
>  		if (dev->parent) {
>  			parent = dev->parent;
> @@ -659,8 +661,6 @@ int pm_schedule_suspend(struct device *d
>  
>  	if (dev->power.runtime_status == RPM_SUSPENDED)
>  		retval = 1;
> -	else if (dev->power.runtime_status == RPM_SUSPENDING)
> -		retval = -EINPROGRESS;
>  	else if (atomic_read(&dev->power.usage_count) > 0
>  	    || dev->power.disable_depth > 0)
>  		retval = -EAGAIN;

  reply	other threads:[~2010-03-19 21:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-19 15:51 [PATCH] PM: allow runtime_suspend methods to call pm_schedule_suspend Alan Stern
2010-03-19 21:25 ` Rafael J. Wysocki [this message]
2010-03-20  1:49   ` Alan Stern

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=201003192225.59192.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=stern@rowland.harvard.edu \
    /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