lkml.org 
[lkml]   [2006]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/26] Dynamic kernel command-line - common
    Date

    1. Rename saved_command_line into boot_command_line, mark
    as init disposable.
    2. Add dynamic allocated saved_command_line.
    3. Add dynamic allocated static_command_line.
    4. During startup copy:
    boot_command_line into saved_command_line.
    arch command_line into static_command_line.
    5. Parse static_command_line and not
    arch command_line, so arch command_line may
    be freed.

    Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>

    ---

    diff -urNp linux-2.6.18-rc5-mm1.org/include/linux/init.h
    linux-2.6.18-rc5-mm1/include/linux/init.h
    --- linux-2.6.18-rc5-mm1.org/include/linux/init.h 2006-09-03
    18:57:16.000000000 +0300
    +++ linux-2.6.18-rc5-mm1/include/linux/init.h 2006-09-03
    20:30:12.000000000 +0300
    @@ -67,7 +67,8 @@ extern initcall_t __con_initcall_start[]
    extern initcall_t __security_initcall_start[],
    __security_initcall_end[];

    /* Defined in init/main.c */
    -extern char saved_command_line[];
    +extern char __initdata boot_command_line[];
    +extern char *saved_command_line;
    extern unsigned int reset_devices;

    /* used by init/main.c */
    @@ -145,7 +146,7 @@ struct obs_kernel_param {
    #define early_param(str, fn) \
    __setup_param(str, fn, fn, 1)

    -/* Relies on saved_command_line being set */
    +/* Relies on boot_command_line being set */
    void __init parse_early_param(void);
    #endif /* __ASSEMBLY__ */

    diff -urNp linux-2.6.18-rc5-mm1.org/init/main.c
    linux-2.6.18-rc5-mm1/init/main.c
    --- linux-2.6.18-rc5-mm1.org/init/main.c 2006-09-03
    18:57:18.000000000 +0300
    +++ linux-2.6.18-rc5-mm1/init/main.c 2006-09-03
    23:27:30.000000000 +0300
    @@ -116,8 +116,12 @@ extern void time_init(void);
    void (*late_time_init)(void);
    extern void softirq_init(void);

    -/* Untouched command line (eg. for /proc) saved by
    arch-specific code. */
    -char saved_command_line[COMMAND_LINE_SIZE];
    +/* Untouched command line saved by arch-specific code. */
    +char __initdata boot_command_line[COMMAND_LINE_SIZE];
    +/* Untouched saved command line (eg. for /proc) */
    +char *saved_command_line;
    +/* Command line for parameter parsing */
    +static char *static_command_line;

    static char *execute_command;
    static char *ramdisk_execute_command;
    @@ -400,6 +404,20 @@ static void __init smp_init(void)
    #endif

    /*
    + * We need to store the untouched command line for future
    reference.
    + * We also need to store the touched command line since the
    parameter
    + * parsing is performed in place, and we should allow a
    component to
    + * store reference of name/value for future reference.
    + */
    +static void __init setup_command_line(char *command_line)
    +{
    + saved_command_line = alloc_bootmem(strlen
    (boot_command_line)+1);
    + static_command_line = alloc_bootmem(strlen
    (command_line)+1);
    + strcpy (saved_command_line, boot_command_line);
    + strcpy (static_command_line, command_line);
    +}
    +
    +/*
    * We need to finalize in a non-__init function or else
    race conditions
    * between the root thread and the init thread may cause
    start_kernel to
    * be reaped by free_initmem before the root thread has
    proceeded to
    @@ -453,7 +471,7 @@ void __init parse_early_param(void)
    return;

    /* All fall through to do_early_param. */
    - strlcpy(tmp_cmdline, saved_command_line,
    COMMAND_LINE_SIZE);
    + strlcpy(tmp_cmdline, boot_command_line,
    COMMAND_LINE_SIZE);
    parse_args("early options", tmp_cmdline, NULL, 0,
    do_early_param);
    done = 1;
    }
    @@ -503,6 +521,7 @@ asmlinkage void __init start_kernel(void
    printk(KERN_NOTICE);
    printk(linux_banner);
    setup_arch(&command_line);
    + setup_command_line(command_line);
    setup_per_cpu_areas();
    smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */

    @@ -519,9 +538,9 @@ asmlinkage void __init start_kernel(void
    preempt_disable();
    build_all_zonelists();
    page_alloc_init();
    - printk(KERN_NOTICE "Kernel command line: %s\n",
    saved_command_line);
    + printk(KERN_NOTICE "Kernel command line: %s\n",
    boot_command_line);
    parse_early_param();
    - parse_args("Booting kernel", command_line,
    __start___param,
    + parse_args("Booting kernel", static_command_line,
    __start___param,
    __stop___param - __start___param,
    &unknown_bootoption);
    sort_main_extable();
    --
    VGER BF report: H 0.00112924
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-09-04 00:09    [W:0.047 / U:179.928 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site