Re: [PATCH] PM: don't enable interrupts while running in_interrupt

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

 



On Tuesday, January 25, 2011, Alan Stern wrote:
> This patch (as1445) fixes a bug in the runtime PM core left over from
> the addition of the no_callbacks flag.  If this flag is set then it is
> possible for rpm_suspend() to be called in_interrupt, so when
> releasing spinlocks it's important not to re-enable interrupts.  
> 
> To avoid an unnecessary save-and-restore of the interrupt flag, the
> patch also inlines a pm_request_idle() call.
> 
> This fixes Bugzilla #27482.
> 
> (The offending code was added in 2.6.37, so it's not necessary to apply
> this to any earlier stable kernels.)
> 
> Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> Reported-by: tim blechmann <tim@xxxxxxxxxx>
> CC: <stable@xxxxxxxxxx>

Applied to suspend-2.6/pm-fixes, thanks Alan!


> ---
> 
> 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
> @@ -407,12 +407,15 @@ static int rpm_suspend(struct device *de
>  		goto out;
>  	}
>  
> +	/* Maybe the parent is now able to suspend. */
>  	if (parent && !parent->power.ignore_children && !dev->power.irq_safe) {
> -		spin_unlock_irq(&dev->power.lock);
> +		spin_unlock(&dev->power.lock);
>  
> -		pm_request_idle(parent);
> +		spin_lock(&parent->power.lock);
> +		rpm_idle(parent, RPM_ASYNC);
> +		spin_unlock(&parent->power.lock);
>  
> -		spin_lock_irq(&dev->power.lock);
> +		spin_lock(&dev->power.lock);
>  	}
>  
>   out:
> 
> 
> 

_______________________________________________
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