X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=init%2Finitramfs.c;h=1db02a0025db2a5f805ed78d7f88a8cf30a230df;hb=982286d1b8e438f595cdc9304cc4c185c7b90a39;hp=4fa0f7977de1a16db501d91c3c9b062cb7898c2d;hpb=116140b7f5c9182c86a4e419f81684209357aea7;p=powerpc.git diff --git a/init/initramfs.c b/init/initramfs.c index 4fa0f7977d..1db02a0025 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -133,7 +133,7 @@ static __initdata loff_t this_header, next_header; static __initdata int dry_run; -static inline void eat(unsigned n) +static inline void __init eat(unsigned n) { victim += n; this_header += n; @@ -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; }