lkml.org 
[lkml]   [2009]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/19] TuxOnIce: Support for replacing swsusp.
    Date
    Provide support for activating TuxOnIce via

    echo disk > /sys/power/state

    together with a compile time option to control the default and a sysfs
    entry in TuxOnIce's directories to toggle it at run time. Since at
    resume time we don't know whether we wrote a TuxOnIce image, always
    check for TuxOnIce images when checking for swsusp images (TuxOnIce
    recognises swsusp signatures and won't complain about them).

    Signed-off-by: Nigel Cunningham <nigel@tuxonice.net>
    ---
    kernel/power/Kconfig | 14 ++++++++++++++
    kernel/power/disk.c | 10 ++++++++++
    kernel/power/tuxonice.h | 1 +
    kernel/power/tuxonice_builtin.c | 3 +++
    kernel/power/tuxonice_highlevel.c | 2 ++
    5 files changed, 30 insertions(+), 0 deletions(-)

    diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
    index f669cdd..dfe0328 100644
    --- a/kernel/power/Kconfig
    +++ b/kernel/power/Kconfig
    @@ -259,6 +259,20 @@ menuconfig TOI_CORE
    bit. Keep image mode is a little less user friendly on purpose - it
    should not be used without thought!

    + config TOI_REPLACE_SWSUSP
    + bool "Replace swsusp by default"
    + default y
    + depends on TOI_CORE
    + ---help---
    + TuxOnIce can replace swsusp. This option makes that the default state,
    + requiring you to echo 0 > /sys/power/tuxonice/replace_swsusp if you want
    + to use the vanilla kernel functionality. Note that your initrd/ramfs will
    + need to do this before trying to resume, too.
    + With overriding swsusp enabled, echoing disk to /sys/power/state will
    + start a TuxOnIce cycle. If resume= doesn't specify an allocator and both
    + the swap and file allocators are compiled in, the swap allocator will be
    + used by default.
    +
    config TOI_IGNORE_LATE_INITCALL
    bool "Wait for initrd/ramfs to run, by default"
    default n
    diff --git a/kernel/power/disk.c b/kernel/power/disk.c
    index 9a1174c..510730a 100644
    --- a/kernel/power/disk.c
    +++ b/kernel/power/disk.c
    @@ -556,6 +556,9 @@ int hibernate(void)
    {
    int error;

    + if (test_action_state(TOI_REPLACE_SWSUSP))
    + return try_tuxonice_hibernate();
    +
    mutex_lock(&pm_mutex);
    /* The snapshot device should not be opened while we're running */
    if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
    @@ -637,6 +640,13 @@ int software_resume(void)
    {
    int error;
    unsigned int flags;
    + resume_attempted = 1;
    +
    + /*
    + * We can't know (until an image header - if any - is loaded), whether
    + * we did override swsusp. We therefore ensure that both are tried.
    + */
    + try_tuxonice_resume();

    /*
    * If the user said "noresume".. bail out early.
    diff --git a/kernel/power/tuxonice.h b/kernel/power/tuxonice.h
    index 2262973..1d6349d 100644
    --- a/kernel/power/tuxonice.h
    +++ b/kernel/power/tuxonice.h
    @@ -55,6 +55,7 @@ enum {
    TOI_TEST_BIO,
    TOI_NO_PAGESET2,
    TOI_IGNORE_ROOTFS,
    + TOI_REPLACE_SWSUSP,
    TOI_PAGESET2_FULL,
    TOI_ABORT_ON_RESAVE_NEEDED,
    TOI_NO_MULTITHREADED_IO,
    diff --git a/kernel/power/tuxonice_builtin.c b/kernel/power/tuxonice_builtin.c
    index dab9de2..da7680e 100644
    --- a/kernel/power/tuxonice_builtin.c
    +++ b/kernel/power/tuxonice_builtin.c
    @@ -165,6 +165,9 @@ struct toi_boot_kernel_data toi_bkd __nosavedata
    __attribute__((aligned(PAGE_SIZE))) = {
    MY_BOOT_KERNEL_DATA_VERSION,
    0,
    +#ifdef CONFIG_TOI_REPLACE_SWSUSP
    + (1 << TOI_REPLACE_SWSUSP) |
    +#endif
    (1 << TOI_NO_FLUSHER_THREAD) |
    (1 << TOI_PAGESET2_FULL) | (1 << TOI_LATE_CPU_HOTPLUG),
    };
    diff --git a/kernel/power/tuxonice_highlevel.c b/kernel/power/tuxonice_highlevel.c
    index 06f97e7..9bd5b34 100644
    --- a/kernel/power/tuxonice_highlevel.c
    +++ b/kernel/power/tuxonice_highlevel.c
    @@ -1190,6 +1190,8 @@ static struct toi_sysfs_data sysfs_params[] = {
    SYSFS_BIT("full_pageset2", SYSFS_RW, &toi_bkd.toi_action,
    TOI_PAGESET2_FULL, 0),
    SYSFS_BIT("reboot", SYSFS_RW, &toi_bkd.toi_action, TOI_REBOOT, 0),
    + SYSFS_BIT("replace_swsusp", SYSFS_RW, &toi_bkd.toi_action,
    + TOI_REPLACE_SWSUSP, 0),
    SYSFS_STRING("resume_commandline", SYSFS_RW,
    toi_bkd.toi_nosave_commandline, COMMAND_LINE_SIZE, 0,
    NULL),
    --
    1.5.6.3


    \
     
     \ /
      Last update: 2009-05-06 16:57    [W:4.165 / U:0.324 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site