Re: [PATCH] PM: runtime PM + idle: allow usage when interrupts are disabled

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

 



2010/8/11 Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx>:
> When using runtime PM in combination with CPUidle, the runtime PM
> transtions of some devices may be triggered during the idle path.
> Late in the idle sequence, interrupts will likely be disabled when
> runtime PM for these devices is initiated.
>
> Currently, the runtime PM core assumes methods are called with
> interrupts enabled.  However, if it is called with interrupts
> disabled, the internal locking unconditionally enables interrupts, for
> example:
>
> pm_runtime_put_sync()

It is always called from process context,  why do you have to disable irq
before calling pm_runtime_put_sync?

>    __pm_runtime_put()
>        pm_runtime_idle()
>            spin_lock_irq()
>            __pm_runtime_idle()
>                spin_unlock_irq()   <--- interrupts unconditionally enabled
>                dev->bus->pm->runtime_idle()
>                spin_lock_irq()
>             spin_unlock_irq()
>
> Unconditionally enabling interrupts late in the idle sequence is not
> desired behavior.  To fix, use the save/restore versions of the
> spinlock API.
>
> Reported-by: Partha Basak <p-basak2@xxxxxx>
> Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx>
> ---
> RFC: I'm not crazy about having the 'flags' in struct dev_pm_info, but
> since the locks are taken and released in separate functions, this
> seems better than changing the function APIs to pass around the flags.
>

thanks,

-- 
Lei Ming
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux