• Rafael J. Wysocki's avatar
    PM-runtime: Take suppliers into account in __pm_runtime_set_status() · 4080ab08
    Rafael J. Wysocki authored
    If the target device has any suppliers, as reflected by device links
    to them, __pm_runtime_set_status() does not take them into account,
    which is not consistent with the other parts of the PM-runtime
    framework and may lead to programming mistakes.
    
    Modify __pm_runtime_set_status() to take suppliers into account by
    activating them upfront if the new status is RPM_ACTIVE and
    deactivating them on exit if the new status is RPM_SUSPENDED.
    
    If the activation of one of the suppliers fails, the new status
    will be RPM_SUSPENDED and the (remaining) suppliers will be
    deactivated on exit (the child count of the device's parent
    will be dropped too then).
    
    Of course, adding device links locking to __pm_runtime_set_status()
    means that it cannot be run fron interrupt context, so make it use
    spin_lock_irq() and spin_unlock_irq() instead of spin_lock_irqsave()
    and spin_unlock_irqrestore(), respectively.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    4080ab08
runtime.c 48.2 KB