lkml.org 
[lkml]   [2009]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/11] kexec: Change kexec jump code ordering
    Date
    From: Rafael J. Wysocki <rjw@sisk.pl>

    Change the ordering of the kexec jump code so that the nonboot CPUs
    are disabled after calling device drivers' "late suspend" methods.

    This change reflects the recent modifications of the power management
    code that is also used by kexec jump.

    Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    ---
    kernel/kexec.c | 19 +++++++++----------
    1 file changed, 9 insertions(+), 10 deletions(-)

    Index: linux-2.6/kernel/kexec.c
    ===================================================================
    --- linux-2.6.orig/kernel/kexec.c
    +++ linux-2.6/kernel/kexec.c
    @@ -1450,9 +1450,6 @@ int kernel_kexec(void)
    error = device_suspend(PMSG_FREEZE);
    if (error)
    goto Resume_console;
    - error = disable_nonboot_cpus();
    - if (error)
    - goto Resume_devices;
    device_pm_lock();
    /* At this point, device_suspend() has been called,
    * but *not* device_power_down(). We *must*
    @@ -1463,13 +1460,15 @@ int kernel_kexec(void)
    */
    error = device_power_down(PMSG_FREEZE);
    if (error)
    - goto Unlock_pm;
    -
    + goto Resume_devices;
    + error = disable_nonboot_cpus();
    + if (error)
    + goto Enable_cpus;
    local_irq_disable();
    /* Suspend system devices */
    error = sysdev_suspend(PMSG_FREEZE);
    if (error)
    - goto Power_up_devices;
    + goto Enable_irqs;
    } else
    #endif
    {
    @@ -1483,13 +1482,13 @@ int kernel_kexec(void)
    #ifdef CONFIG_KEXEC_JUMP
    if (kexec_image->preserve_context) {
    sysdev_resume();
    - Power_up_devices:
    + Enable_irqs:
    local_irq_enable();
    - device_power_up(PMSG_RESTORE);
    - Unlock_pm:
    - device_pm_unlock();
    + Enable_cpus:
    enable_nonboot_cpus();
    + device_power_up(PMSG_RESTORE);
    Resume_devices:
    + device_pm_unlock();
    device_resume(PMSG_RESTORE);
    Resume_console:
    resume_console();

    \
     
     \ /
      Last update: 2009-03-14 12:45    [W:0.027 / U:0.636 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site