lkml.org 
[lkml]   [2011]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [255/275] PM / Hibernate: Make default image size depend on total RAM size
    Date
    2.6.35-longterm review patch.  If anyone has any objections, please let me know.

    ------------------
    From: Rafael J. Wysocki <rjw@sisk.pl>

    [ upstream commit ac5c24ec1e983313ef0015258fba6f630e54e7cf ]

    The default hibernation image size is currently hard coded and euqal
    to 500 MB, which is not a reasonable default on many contemporary
    systems. Make it equal 2/5 of the total RAM size (this is slightly
    below the maximum, i.e. 1/2 of the total RAM size, and seems to be
    generally suitable).

    Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    Tested-by: M. Vefa Bicakci <bicave@superonline.com>
    Signed-off-by: Andi Kleen <ak@linux.intel.com>

    ---
    Documentation/power/interface.txt | 2 +-
    kernel/power/main.c | 1 +
    kernel/power/power.h | 9 ++++++++-
    kernel/power/snapshot.c | 7 ++++++-
    4 files changed, 16 insertions(+), 3 deletions(-)

    Index: linux-2.6.35.y/Documentation/power/interface.txt
    ===================================================================
    --- linux-2.6.35.y.orig/Documentation/power/interface.txt 2011-03-29 22:50:08.637037418 -0700
    +++ linux-2.6.35.y/Documentation/power/interface.txt 2011-03-29 23:03:03.570208818 -0700
    @@ -57,7 +57,7 @@
    suspend image will be as small as possible.

    Reading from this file will display the current image size limit, which
    -is set to 500 MB by default.
    +is set to 2/5 of available RAM by default.

    /sys/power/pm_trace controls the code which saves the last PM event point in
    the RTC across reboots, so that you can debug a machine that just hangs
    Index: linux-2.6.35.y/kernel/power/main.c
    ===================================================================
    --- linux-2.6.35.y.orig/kernel/power/main.c 2011-03-29 22:50:08.637037418 -0700
    +++ linux-2.6.35.y/kernel/power/main.c 2011-03-29 23:03:03.570208818 -0700
    @@ -266,6 +266,7 @@
    int error = pm_start_workqueue();
    if (error)
    return error;
    + hibernate_image_size_init();
    power_kobj = kobject_create_and_add("power", NULL);
    if (!power_kobj)
    return -ENOMEM;
    Index: linux-2.6.35.y/kernel/power/power.h
    ===================================================================
    --- linux-2.6.35.y.orig/kernel/power/power.h 2011-03-29 22:50:08.637037418 -0700
    +++ linux-2.6.35.y/kernel/power/power.h 2011-03-29 23:03:03.571208793 -0700
    @@ -14,6 +14,9 @@
    } __attribute__((aligned(PAGE_SIZE)));

    #ifdef CONFIG_HIBERNATION
    +/* kernel/power/snapshot.c */
    +extern void __init hibernate_image_size_init(void);
    +
    #ifdef CONFIG_ARCH_HIBERNATION_HEADER
    /* Maximum size of architecture specific data in a hibernation header */
    #define MAX_ARCH_HEADER_SIZE (sizeof(struct new_utsname) + 4)
    @@ -49,7 +52,11 @@
    extern int hibernation_snapshot(int platform_mode);
    extern int hibernation_restore(int platform_mode);
    extern int hibernation_platform_enter(void);
    -#endif
    +
    +#else /* !CONFIG_HIBERNATION */
    +
    +static inline void hibernate_image_size_init(void) {}
    +#endif /* !CONFIG_HIBERNATION */

    extern int pfn_is_nosave(unsigned long);

    Index: linux-2.6.35.y/kernel/power/snapshot.c
    ===================================================================
    --- linux-2.6.35.y.orig/kernel/power/snapshot.c 2011-03-29 23:03:03.551209304 -0700
    +++ linux-2.6.35.y/kernel/power/snapshot.c 2011-03-29 23:03:03.573208741 -0700
    @@ -46,7 +46,12 @@
    * size will not exceed N bytes, but if that is impossible, it will
    * try to create the smallest image possible.
    */
    -unsigned long image_size = 500 * 1024 * 1024;
    +unsigned long image_size;
    +
    +void __init hibernate_image_size_init(void)
    +{
    + image_size = ((totalram_pages * 2) / 5) * PAGE_SIZE;
    +}

    /* List of PBEs needed for restoring the pages that were allocated before
    * the suspend and included in the suspend image, but have also been

    \
     
     \ /
      Last update: 2011-03-30 23:19    [W:5.180 / U:0.096 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site