From b3bfbdab3e69ae362ab089389aa29cace19f8750 Mon Sep 17 00:00:00 2001 From: Michael Neuling Date: Sat, 10 Feb 2007 01:44:33 -0800 Subject: [PATCH] --- yaml --- r: 47491 b: refs/heads/master c: 0a7b35cb18c52d651f6ed9cd59edc979200ab880 h: refs/heads/master i: 47489: 0c7151c7a30dcf43468cb029a0890b2914f7f8ee 47487: 167bc3405500b9507579bd1e1c9638e5da06183b v: v3 --- [refs] | 2 +- trunk/Documentation/kernel-parameters.txt | 2 ++ trunk/init/initramfs.c | 17 ++++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index aeb288d2db27..b5fc0374d15d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 70e840499aae90be1de542894062ad2899d23642 +refs/heads/master: 0a7b35cb18c52d651f6ed9cd59edc979200ab880 diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt index 25d298517104..d25acd51e181 100644 --- a/trunk/Documentation/kernel-parameters.txt +++ b/trunk/Documentation/kernel-parameters.txt @@ -1396,6 +1396,8 @@ and is between 256 and 4096 characters. It is defined in the file in units (needed only for swap files). See Documentation/power/swsusp-and-swap-files.txt + retain_initrd [RAM] Keep initrd memory after extraction + rhash_entries= [KNL,NET] Set number of hash buckets for route cache diff --git a/trunk/init/initramfs.c b/trunk/init/initramfs.c index 4fa0f7977de1..00eff7a11085 100644 --- a/trunk/init/initramfs.c +++ b/trunk/init/initramfs.c @@ -491,6 +491,17 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only) return message; } +static int __initdata do_retain_initrd; + +static int __init retain_initrd_param(char *str) +{ + if (*str) + return 0; + do_retain_initrd = 1; + return 1; +} +__setup("retain_initrd", retain_initrd_param); + extern char __initramfs_start[], __initramfs_end[]; #ifdef CONFIG_BLK_DEV_INITRD #include @@ -501,7 +512,11 @@ static void __init free_initrd(void) #ifdef CONFIG_KEXEC unsigned long crashk_start = (unsigned long)__va(crashk_res.start); unsigned long crashk_end = (unsigned long)__va(crashk_res.end); +#endif + if (do_retain_initrd) + goto skip; +#ifdef CONFIG_KEXEC /* * If the initrd region is overlapped with crashkernel reserved region, * free only memory that is not part of crashkernel region. @@ -519,7 +534,7 @@ static void __init free_initrd(void) } else #endif free_initrd_mem(initrd_start, initrd_end); - +skip: initrd_start = 0; initrd_end = 0; }