Re: [PATCH] PM: allow runtime_suspend methods to call pm_schedule_suspend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxxxxxx>

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;
_______________________________________________
linux-pm mailing list
linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/linux-pm

[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux