• Rafael J. Wysocki's avatar
    PM / Domains: Fix hibernation restore of devices, v2 · 65533bbf
    Rafael J. Wysocki authored
    During resume from hibernation pm_genpd_restore_noirq() should only
    power off domains whose suspend_power_off flags are set once and
    not every time it is called for a device in the given domain.
    Moreover, it shouldn't decrement genpd->suspended_count, because
    that field is not touched during device freezing and therefore it is
    always equal to 0 when pm_genpd_restore_noirq() runs for the first
    device in the given domain.
    
    This means pm_genpd_restore_noirq() may use genpd->suspended_count
    to determine whether or not it it has been called for the domain in
    question already in this cycle (it only needs to increment that
    field every time it runs for this purpose) and whether or not it
    should check if the domain needs to be powered off.  For that to
    work, though, pm_genpd_prepare() has to clear genpd->suspended_count
    when it runs for the first device in the given domain (in which case
    that flag need not be cleared during domain initialization).
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Cc: stable@vger.kernel.org
    65533bbf
domain.c 43.6 KB