[lkml]   [2011]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[221/272] PM / Runtime: Dont enable interrupts while running in_interrupt
    2.6.37-stable review patch.  If anyone has any objections, please let us know.


    From: Alan Stern <>

    commit c3810c88788d505d4ffd786addd111b745e42161 upstream.

    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 <>
    Reported-by: tim blechmann <>
    Signed-off-by: Rafael J. Wysocki <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/base/power/runtime.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    --- a/drivers/base/power/runtime.c
    +++ b/drivers/base/power/runtime.c
    @@ -404,12 +404,15 @@ static int rpm_suspend(struct device *de
    goto out;

    + /* Maybe the parent is now able to suspend. */
    if (parent && !parent->power.ignore_children) {
    - 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);


     \ /
      Last update: 2011-02-16 01:55    [W:0.039 / U:4.124 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site