• Srivatsa S. Bhat's avatar
    cpufreq: Preserve policy structure across suspend/resume · 8414809c
    Srivatsa S. Bhat authored
    To perform light-weight cpu-init and teardown in the cpufreq subsystem
    during suspend/resume, we need to separate out the 2 main functionalities
    of the cpufreq CPU hotplug callbacks, as outlined below:
    
    1. Init/tear-down of core cpufreq and CPU-specific components, which are
       critical to the correct functioning of the cpufreq subsystem.
    
    2. Init/tear-down of cpufreq sysfs files during suspend/resume.
    
    The first part requires accurate updates to the policy structure such as
    its ->cpus and ->related_cpus masks, whereas the second part requires that
    the policy->kobj structure is not released or re-initialized during
    suspend/resume.
    
    To handle both these requirements, we need to allow updates to the policy
    structure throughout suspend/resume, but prevent the structure from getting
    freed up. Also, we must have a mechanism by which the cpu-up callbacks can
    restore the policy structure, without allocating things afresh. (That also
    helps avoid memory leaks).
    
    To achieve this, we use 2 schemes:
    a. Use a fallback per-cpu storage area for preserving the policy structures
       during suspend, so that they can be restored during resume appropriately.
    
    b. Use the 'frozen' flag to determine when to free or allocate the policy
       structure vs when to restore the policy from the saved fallback storage.
       Thus we can successfully preserve the structure across suspend/resume.
    
    Effectively, this helps us complete the separation of the 'light-weight'
    and the 'full' init/tear-down sequences in the cpufreq subsystem, so that
    this can be made use of in the suspend/resume scenario.
    Signed-off-by: default avatarSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    8414809c
cpufreq.c 55 KB