2006-12-02 10:59:21

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 00/26] Dynamic kernel command-line


Hello,

This is take 3 of submission, I submit this patch
once in a few monthes to collect some more signatures :)
Until now, I got three:
- avr32
- sh
- sh64

I know this is not one of major priorities, but it
should be simple enough to be reviewed and included.

I will also be happy to get a REJECT response, so I
stop trying to get it included. Any suggestions of
how to push this farward will also be appreciated.

Current implementation stores a static command-line
buffer allocated to COMMAND_LINE_SIZE size. Most
architectures stores two copies of this buffer, one
for future reference and one for parameter parsing.

Current kernel command-line size for most architecture
is much too small for module parameters, video settings,
initramfs paramters and much more. The problem is that
setting COMMAND_LINE_SIZE to a grater value, allocates
static buffers.

In order to allow a greater command-line size, these
buffers should be dynamically allocated or marked
as init disposable buffers, so unused memory can be
released.

This patch renames the static saved_command_line
variable into boot_command_line adding __initdata
attribute, so that it can be disposed after
initialization. This rename is required so applications
that use saved_command_line will not be affected
by this change.

It reintroduces saved_command_line as dynamically
allocated buffer to match the data in boot_command_line.

It also mark secondary command-line buffer as __initdata,
and copies it to dynamically allocated static_command_line
buffer components may hold reference to it after
initialization.

This patch is for linux-2.6.19 and is divided to
target each architecture. I could not check this in any
architecture so please forgive me if I got it wrong.

The per-architecture modification is very simple, use
boot_command_line in place of saved_command_line. The
common code is the change into dynamic command-line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---


2006-12-02 10:59:22

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 01/26] Dynamic kernel command-line - common


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 <[email protected]>

---

diff -urNp linux-2.6.19.org/include/linux/init.h linux-2.6.19/include/linux/init.h
--- linux-2.6.19.org/include/linux/init.h 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/include/linux/init.h 2006-12-02 11:31:32.000000000 +0200
@@ -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 */
@@ -163,7 +164,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.19.org/init/main.c linux-2.6.19/init/main.c
--- linux-2.6.19.org/init/main.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/init/main.c 2006-12-02 11:33:35.000000000 +0200
@@ -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);
unwind_setup();
setup_per_cpu_areas();
smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
@@ -520,9 +539,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();

2006-12-02 10:59:49

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 05/26] Dynamic kernel command-line - avr32


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>
Acked-by: Haavard Skinnemoen <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/avr32/kernel/setup.c linux-2.6.19/arch/avr32/kernel/setup.c
--- linux-2.6.19.org/arch/avr32/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/avr32/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -44,7 +44,7 @@ struct avr32_cpuinfo boot_cpu_data = {
};
EXPORT_SYMBOL(boot_cpu_data);

-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

/*
* Should be more than enough, but if you have a _really_ complex
@@ -202,7 +202,7 @@ __tagtable(ATAG_MEM, parse_tag_mem);

static int __init parse_tag_cmdline(struct tag *tag)
{
- strlcpy(saved_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
return 0;
}
__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
@@ -318,7 +318,7 @@ void __init setup_arch (char **cmdline_p
init_mm.end_data = (unsigned long) &_edata;
init_mm.brk = (unsigned long) &_end;

- strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE);
+ strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;
parse_early_param();

2006-12-02 10:59:52

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 22/26] Dynamic kernel command-line - sparc64


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/sparc64/kernel/setup.c linux-2.6.19/arch/sparc64/kernel/setup.c
--- linux-2.6.19.org/arch/sparc64/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sparc64/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -315,7 +315,7 @@ void __init setup_arch(char **cmdline_p)
{
/* Initialize PROM console and command line. */
*cmdline_p = prom_getbootargs();
- strcpy(saved_command_line, *cmdline_p);
+ strcpy(boot_command_line, *cmdline_p);

if (tlb_type == hypervisor)
printk("ARCH: SUN4V\n");
diff -urNp linux-2.6.19.org/arch/sparc64/kernel/sparc64_ksyms.c linux-2.6.19/arch/sparc64/kernel/sparc64_ksyms.c
--- linux-2.6.19.org/arch/sparc64/kernel/sparc64_ksyms.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sparc64/kernel/sparc64_ksyms.c 2006-12-02 11:31:33.000000000 +0200
@@ -253,7 +253,7 @@ EXPORT_SYMBOL(prom_getproplen);
EXPORT_SYMBOL(prom_getproperty);
EXPORT_SYMBOL(prom_node_has_property);
EXPORT_SYMBOL(prom_setprop);
-EXPORT_SYMBOL(saved_command_line);
+EXPORT_SYMBOL(boot_command_line);
EXPORT_SYMBOL(prom_finddevice);
EXPORT_SYMBOL(prom_feval);
EXPORT_SYMBOL(prom_getbool);

2006-12-02 11:00:46

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 09/26] Dynamic kernel command-line - i386


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/i386/kernel/head.S linux-2.6.19/arch/i386/kernel/head.S
--- linux-2.6.19.org/arch/i386/kernel/head.S 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/i386/kernel/head.S 2006-12-02 11:31:32.000000000 +0200
@@ -97,7 +97,7 @@ ENTRY(startup_32)
movzwl OLD_CL_OFFSET,%esi
addl $(OLD_CL_BASE_ADDR),%esi
2:
- movl $(saved_command_line - __PAGE_OFFSET),%edi
+ movl $(boot_command_line - __PAGE_OFFSET),%edi
movl $(COMMAND_LINE_SIZE/4),%ecx
rep
movsl
diff -urNp linux-2.6.19.org/arch/i386/kernel/setup.c linux-2.6.19/arch/i386/kernel/setup.c
--- linux-2.6.19.org/arch/i386/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/i386/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -145,7 +145,7 @@ unsigned long saved_videomode;
#define RAMDISK_PROMPT_FLAG 0x8000
#define RAMDISK_LOAD_FLAG 0x4000

-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

unsigned char __initdata boot_params[PARAM_SIZE];

@@ -1405,7 +1405,7 @@ void __init setup_arch(char **cmdline_p)
print_memory_map("user");
}

- strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE);
+ strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;

max_low_pfn = setup_memory();

2006-12-02 11:00:59

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 14/26] Dynamic kernel command-line - mips


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/mips/kernel/setup.c linux-2.6.19/arch/mips/kernel/setup.c
--- linux-2.6.19.org/arch/mips/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/mips/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -409,7 +409,7 @@ static void __init arch_mem_init(char **
print_memory_map();

strlcpy(command_line, arcs_cmdline, sizeof(command_line));
- strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);

*cmdline_p = command_line;

2006-12-02 11:02:18

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 13/26] Dynamic kernel command-line - m68knommu


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/m68knommu/kernel/setup.c linux-2.6.19/arch/m68knommu/kernel/setup.c
--- linux-2.6.19.org/arch/m68knommu/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/m68knommu/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -47,7 +47,7 @@ unsigned long memory_end;
EXPORT_SYMBOL(memory_start);
EXPORT_SYMBOL(memory_end);

-char command_line[COMMAND_LINE_SIZE];
+char __initdata command_line[COMMAND_LINE_SIZE];

/* setup some dummy routines */
static void dummy_waitbut(void)
@@ -234,8 +234,8 @@ void setup_arch(char **cmdline_p)

/* Keep a copy of command line */
*cmdline_p = &command_line[0];
- memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = 0;
+ memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = 0;

#ifdef DEBUG
if (strlen(*cmdline_p))

2006-12-02 11:03:12

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 10/26] Dynamic kernel command-line - ia64


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/ia64/kernel/efi.c linux-2.6.19/arch/ia64/kernel/efi.c
--- linux-2.6.19.org/arch/ia64/kernel/efi.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ia64/kernel/efi.c 2006-12-02 11:31:32.000000000 +0200
@@ -412,11 +412,11 @@ efi_init (void)
efi_char16_t *c16;
u64 efi_desc_size;
char *cp, vendor[100] = "unknown";
- extern char saved_command_line[];
+ extern char __initdata boot_command_line[];
int i;

/* it's too early to be able to use the standard kernel command line support... */
- for (cp = saved_command_line; *cp; ) {
+ for (cp = boot_command_line; *cp; ) {
if (memcmp(cp, "mem=", 4) == 0) {
mem_limit = memparse(cp + 4, &cp);
} else if (memcmp(cp, "max_addr=", 9) == 0) {
diff -urNp linux-2.6.19.org/arch/ia64/kernel/sal.c linux-2.6.19/arch/ia64/kernel/sal.c
--- linux-2.6.19.org/arch/ia64/kernel/sal.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ia64/kernel/sal.c 2006-12-02 11:31:32.000000000 +0200
@@ -194,9 +194,9 @@ static void __init
chk_nointroute_opt(void)
{
char *cp;
- extern char saved_command_line[];
+ extern char __initdata boot_command_line[];

- for (cp = saved_command_line; *cp; ) {
+ for (cp = boot_command_line; *cp; ) {
if (memcmp(cp, "nointroute", 10) == 0) {
no_int_routing = 1;
printk ("no_int_routing on\n");
diff -urNp linux-2.6.19.org/arch/ia64/kernel/setup.c linux-2.6.19/arch/ia64/kernel/setup.c
--- linux-2.6.19.org/arch/ia64/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ia64/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -404,7 +404,7 @@ setup_arch (char **cmdline_p)
ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);

*cmdline_p = __va(ia64_boot_param->command_line);
- strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);

efi_init();
io_port_init();

2006-12-02 11:02:23

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 12/26] Dynamic kernel command-line - m68k


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/m68k/kernel/setup.c linux-2.6.19/arch/m68k/kernel/setup.c
--- linux-2.6.19.org/arch/m68k/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/m68k/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -256,7 +256,7 @@ void __init setup_arch(char **cmdline_p)
init_mm.brk = (unsigned long) &_end;

*cmdline_p = m68k_command_line;
- memcpy(saved_command_line, *cmdline_p, CL_SIZE);
+ memcpy(boot_command_line, *cmdline_p, CL_SIZE);

/* Parse the command line for arch-specific options.
* For the m68k, this is currently only "debug=xxx" to enable printing

2006-12-02 11:03:13

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 25/26] Dynamic kernel command-line - x86_64


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/include/asm-x86_64/bootsetup.h linux-2.6.19/include/asm-x86_64/bootsetup.h
--- linux-2.6.19.org/include/asm-x86_64/bootsetup.h 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/include/asm-x86_64/bootsetup.h 2006-12-02 11:31:33.000000000 +0200
@@ -31,7 +31,7 @@ extern char x86_boot_params[BOOT_PARAM_S
#define EDD_MBR_SIG_NR (*(unsigned char *) (PARAM+EDD_MBR_SIG_NR_BUF))
#define EDD_MBR_SIGNATURE ((unsigned int *) (PARAM+EDD_MBR_SIG_BUF))
#define EDD_BUF ((struct edd_info *) (PARAM+EDDBUF))
-#define COMMAND_LINE saved_command_line
+#define COMMAND_LINE boot_command_line

#define RAMDISK_IMAGE_START_MASK 0x07FF
#define RAMDISK_PROMPT_FLAG 0x8000
diff -urNp linux-2.6.19.org/arch/x86_64/kernel/head64.c linux-2.6.19/arch/x86_64/kernel/head64.c
--- linux-2.6.19.org/arch/x86_64/kernel/head64.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/x86_64/kernel/head64.c 2006-12-02 11:31:33.000000000 +0200
@@ -34,7 +34,7 @@ static void __init clear_bss(void)
#define OLD_CL_BASE_ADDR 0x90000
#define OLD_CL_OFFSET 0x90022

-extern char saved_command_line[];
+extern char __initdata boot_command_line[];

static void __init copy_bootdata(char *real_mode_data)
{
@@ -50,7 +50,7 @@ static void __init copy_bootdata(char *r
new_data = OLD_CL_BASE_ADDR + * (u16 *) OLD_CL_OFFSET;
}
command_line = (char *) ((u64)(new_data));
- memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
+ memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
}

void __init x86_64_start_kernel(char * real_mode_data)
diff -urNp linux-2.6.19.org/arch/x86_64/kernel/setup.c linux-2.6.19/arch/x86_64/kernel/setup.c
--- linux-2.6.19.org/arch/x86_64/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/x86_64/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -100,7 +100,7 @@ EXPORT_SYMBOL_GPL(edid_info);

extern int root_mountflags;

-char command_line[COMMAND_LINE_SIZE];
+char __initdata command_line[COMMAND_LINE_SIZE];

struct resource standard_io_resources[] = {
{ .name = "dma1", .start = 0x00, .end = 0x1f,
@@ -343,7 +343,7 @@ static void discover_ebda(void)

void __init setup_arch(char **cmdline_p)
{
- printk(KERN_INFO "Command line: %s\n", saved_command_line);
+ printk(KERN_INFO "Command line: %s\n", boot_command_line);

ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
screen_info = SCREEN_INFO;
@@ -373,7 +373,7 @@ void __init setup_arch(char **cmdline_p)

early_identify_cpu(&boot_cpu_data);

- strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE);
+ strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;

parse_early_param();

2006-12-02 11:02:54

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 11/26] Dynamic kernel command-line - m32r


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/m32r/kernel/setup.c linux-2.6.19/arch/m32r/kernel/setup.c
--- linux-2.6.19.org/arch/m32r/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/m32r/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -64,7 +64,7 @@ struct screen_info screen_info = {

extern int root_mountflags;

-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

static struct resource data_resource = {
.name = "Kernel data",
@@ -95,8 +95,8 @@ static __inline__ void parse_mem_cmdline
int usermem = 0;

/* Save unparsed command line copy for /proc/cmdline */
- memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';

memory_start = (unsigned long)CONFIG_MEMORY_START+PAGE_OFFSET;
memory_end = memory_start+(unsigned long)CONFIG_MEMORY_SIZE;

2006-12-02 11:04:05

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 16/26] Dynamic kernel command-line - powerpc


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/powerpc/kernel/legacy_serial.c linux-2.6.19/arch/powerpc/kernel/legacy_serial.c
--- linux-2.6.19.org/arch/powerpc/kernel/legacy_serial.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/powerpc/kernel/legacy_serial.c 2006-12-02 11:31:33.000000000 +0200
@@ -498,7 +498,7 @@ static int __init check_legacy_serial_co
DBG(" -> check_legacy_serial_console()\n");

/* The user has requested a console so this is already set up. */
- if (strstr(saved_command_line, "console=")) {
+ if (strstr(boot_command_line, "console=")) {
DBG(" console was specified !\n");
return -EBUSY;
}
diff -urNp linux-2.6.19.org/arch/powerpc/kernel/prom.c linux-2.6.19/arch/powerpc/kernel/prom.c
--- linux-2.6.19.org/arch/powerpc/kernel/prom.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/powerpc/kernel/prom.c 2006-12-02 11:31:33.000000000 +0200
@@ -894,7 +894,7 @@ void __init early_init_devtree(void *par
of_scan_flat_dt(early_init_dt_scan_memory, NULL);

/* Save command line for /proc/cmdline and then parse parameters */
- strlcpy(saved_command_line, cmd_line, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
parse_early_param();

/* Reserve LMB regions used by kernel, initrd, dt, etc... */
diff -urNp linux-2.6.19.org/arch/powerpc/kernel/udbg.c linux-2.6.19/arch/powerpc/kernel/udbg.c
--- linux-2.6.19.org/arch/powerpc/kernel/udbg.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/powerpc/kernel/udbg.c 2006-12-02 11:31:33.000000000 +0200
@@ -146,7 +146,7 @@ void __init disable_early_printk(void)
{
if (!early_console_initialized)
return;
- if (strstr(saved_command_line, "udbg-immortal")) {
+ if (strstr(boot_command_line, "udbg-immortal")) {
printk(KERN_INFO "early console immortal !\n");
return;
}
diff -urNp linux-2.6.19.org/arch/powerpc/platforms/powermac/setup.c linux-2.6.19/arch/powerpc/platforms/powermac/setup.c
--- linux-2.6.19.org/arch/powerpc/platforms/powermac/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/powerpc/platforms/powermac/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -505,8 +505,8 @@ void note_bootable_part(dev_t dev, int p
if ((goodness <= current_root_goodness) &&
ROOT_DEV != DEFAULT_ROOT_DEVICE)
return;
- p = strstr(saved_command_line, "root=");
- if (p != NULL && (p == saved_command_line || p[-1] == ' '))
+ p = strstr(boot_command_line, "root=");
+ if (p != NULL && (p == boot_command_line || p[-1] == ' '))
return;

if (!found_boot) {

2006-12-02 11:04:06

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 26/26] Dynamic kernel command-line - xtensa


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/xtensa/kernel/setup.c linux-2.6.19/arch/xtensa/kernel/setup.c
--- linux-2.6.19.org/arch/xtensa/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/xtensa/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -80,7 +80,7 @@ extern unsigned long loops_per_jiffy;

/* Command line specified as configuration option. */

-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

#ifdef CONFIG_CMDLINE_BOOL
static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
@@ -255,8 +255,8 @@ void __init setup_arch(char **cmdline_p)
extern int mem_reserve(unsigned long, unsigned long, int);
extern void bootmem_init(void);

- memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
*cmdline_p = command_line;

/* Reserve some memory regions */

2006-12-02 11:04:07

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 15/26] Dynamic kernel command-line - parisc


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/parisc/kernel/setup.c linux-2.6.19/arch/parisc/kernel/setup.c
--- linux-2.6.19.org/arch/parisc/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/parisc/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -45,7 +45,7 @@
#include <asm/io.h>
#include <asm/setup.h>

-char command_line[COMMAND_LINE_SIZE] __read_mostly;
+char __initdata command_line[COMMAND_LINE_SIZE] __read_mostly;

/* Intended for ccio/sba/cpu statistics under /proc/bus/{runway|gsc} */
struct proc_dir_entry * proc_runway_root __read_mostly = NULL;
@@ -71,9 +71,9 @@ void __init setup_cmdline(char **cmdline
/* boot_args[0] is free-mem start, boot_args[1] is ptr to command line */
if (boot_args[0] < 64) {
/* called from hpux boot loader */
- saved_command_line[0] = '\0';
+ boot_command_line[0] = '\0';
} else {
- strcpy(saved_command_line, (char *)__va(boot_args[1]));
+ strcpy(boot_command_line, (char *)__va(boot_args[1]));

#ifdef CONFIG_BLK_DEV_INITRD
if (boot_args[2] != 0) /* did palo pass us a ramdisk? */
@@ -84,7 +84,7 @@ void __init setup_cmdline(char **cmdline
#endif
}

- strcpy(command_line, saved_command_line);
+ strcpy(command_line, boot_command_line);
*cmdline_p = command_line;
}

diff -urNp linux-2.6.19.org/arch/parisc/mm/init.c linux-2.6.19/arch/parisc/mm/init.c
--- linux-2.6.19.org/arch/parisc/mm/init.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/parisc/mm/init.c 2006-12-02 11:31:33.000000000 +0200
@@ -77,12 +77,12 @@ static void __init mem_limit_func(void)
{
char *cp, *end;
unsigned long limit;
- extern char saved_command_line[];
+ extern char __initdata boot_command_line[];

/* We need this before __setup() functions are called */

limit = MAX_MEM;
- for (cp = saved_command_line; *cp; ) {
+ for (cp = boot_command_line; *cp; ) {
if (memcmp(cp, "mem=", 4) == 0) {
cp += 4;
limit = memparse(cp, &end);

2006-12-02 11:00:00

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 04/26] Dynamic kernel command-line - arm26


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/arm26/kernel/setup.c linux-2.6.19/arch/arm26/kernel/setup.c
--- linux-2.6.19.org/arch/arm26/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/arm26/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -80,7 +80,7 @@ unsigned long phys_initrd_size __initdat
static struct meminfo meminfo __initdata = { 0, };
static struct proc_info_item proc_info;
static const char *machine_name;
-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;

@@ -492,8 +492,8 @@ void __init setup_arch(char **cmdline_p)
init_mm.end_data = (unsigned long) &_edata;
init_mm.brk = (unsigned long) &_end;

- memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(&meminfo, cmdline_p, from);
bootmem_init(&meminfo);
paging_init(&meminfo);

2006-12-02 11:05:00

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 17/26] Dynamic kernel command-line - ppc


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/ppc/kernel/setup.c linux-2.6.19/arch/ppc/kernel/setup.c
--- linux-2.6.19.org/arch/ppc/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ppc/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -543,7 +543,7 @@ void __init setup_arch(char **cmdline_p)
init_mm.brk = (unsigned long) klimit;

/* Save unparsed command line copy for /proc/cmdline */
- strlcpy(saved_command_line, cmd_line, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
*cmdline_p = cmd_line;

parse_early_param();
diff -urNp linux-2.6.19.org/arch/ppc/platforms/lopec.c linux-2.6.19/arch/ppc/platforms/lopec.c
--- linux-2.6.19.org/arch/ppc/platforms/lopec.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ppc/platforms/lopec.c 2006-12-02 11:31:33.000000000 +0200
@@ -344,7 +344,7 @@ lopec_setup_arch(void)
if (bootargs != NULL) {
strcpy(cmd_line, bootargs);
/* again.. */
- strcpy(saved_command_line, cmd_line);
+ strcpy(boot_command_line, cmd_line);
}
}
#endif
diff -urNp linux-2.6.19.org/arch/ppc/platforms/pplus.c linux-2.6.19/arch/ppc/platforms/pplus.c
--- linux-2.6.19.org/arch/ppc/platforms/pplus.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ppc/platforms/pplus.c 2006-12-02 11:31:33.000000000 +0200
@@ -592,7 +592,7 @@ static void __init pplus_setup_arch(void
if (bootargs != NULL) {
strcpy(cmd_line, bootargs);
/* again.. */
- strcpy(saved_command_line, cmd_line);
+ strcpy(boot_command_line, cmd_line);
}
}
#endif
diff -urNp linux-2.6.19.org/arch/ppc/platforms/prep_setup.c linux-2.6.19/arch/ppc/platforms/prep_setup.c
--- linux-2.6.19.org/arch/ppc/platforms/prep_setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/ppc/platforms/prep_setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -634,7 +634,7 @@ static void __init prep_init_sound(void)
/*
* Find a way to push these informations to the cs4232 driver
* Give it out with printk, when not in cmd_line?
- * Append it to cmd_line and saved_command_line?
+ * Append it to cmd_line and boot_command_line?
* Format is cs4232=io,irq,dma,dma2
*/
}
@@ -897,7 +897,7 @@ prep_setup_arch(void)
if (bootargs != NULL) {
strcpy(cmd_line, bootargs);
/* again.. */
- strcpy(saved_command_line, cmd_line);
+ strcpy(boot_command_line, cmd_line);
}
}

2006-12-02 10:59:59

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 21/26] Dynamic kernel command-line - sparc


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/sparc/kernel/setup.c linux-2.6.19/arch/sparc/kernel/setup.c
--- linux-2.6.19.org/arch/sparc/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sparc/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -246,7 +246,7 @@ void __init setup_arch(char **cmdline_p)

/* Initialize PROM console and command line. */
*cmdline_p = prom_getbootargs();
- strcpy(saved_command_line, *cmdline_p);
+ strcpy(boot_command_line, *cmdline_p);

/* Set sparc_cpu_model */
sparc_cpu_model = sun_unknown;
diff -urNp linux-2.6.19.org/arch/sparc/kernel/sparc_ksyms.c linux-2.6.19/arch/sparc/kernel/sparc_ksyms.c
--- linux-2.6.19.org/arch/sparc/kernel/sparc_ksyms.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sparc/kernel/sparc_ksyms.c 2006-12-02 11:31:33.000000000 +0200
@@ -237,7 +237,7 @@ EXPORT_SYMBOL(prom_getproplen);
EXPORT_SYMBOL(prom_getproperty);
EXPORT_SYMBOL(prom_node_has_property);
EXPORT_SYMBOL(prom_setprop);
-EXPORT_SYMBOL(saved_command_line);
+EXPORT_SYMBOL(boot_command_line);
EXPORT_SYMBOL(prom_apply_obio_ranges);
EXPORT_SYMBOL(prom_feval);
EXPORT_SYMBOL(prom_getbool);

2006-12-02 11:05:57

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 18/26] Dynamic kernel command-line - s390


Rename saved_command_line into boot_command_line.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/s390/kernel/setup.c linux-2.6.19/arch/s390/kernel/setup.c
--- linux-2.6.19.org/arch/s390/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/s390/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -633,7 +633,7 @@ setup_arch(char **cmdline_p)
#endif /* CONFIG_64BIT */

/* Save unparsed command line copy for /proc/cmdline */
- strlcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);

*cmdline_p = COMMAND_LINE;
*(*cmdline_p + COMMAND_LINE_SIZE - 1) = '\0';

2006-12-02 10:59:53

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 24/26] Dynamic kernel command-line - v850


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/v850/kernel/setup.c linux-2.6.19/arch/v850/kernel/setup.c
--- linux-2.6.19.org/arch/v850/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/v850/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -42,7 +42,7 @@ extern char _root_fs_image_start __attri
extern char _root_fs_image_end __attribute__ ((__weak__));


-char command_line[COMMAND_LINE_SIZE];
+char __initdata command_line[COMMAND_LINE_SIZE];

/* Memory not used by the kernel. */
static unsigned long total_ram_pages;
@@ -64,8 +64,8 @@ void __init setup_arch (char **cmdline)
{
/* Keep a copy of command line */
*cmdline = command_line;
- memcpy (saved_command_line, command_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
+ memcpy (boot_command_line, command_line, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';

console_verbose ();

2006-12-02 11:06:40

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 19/26] Dynamic kernel command-line - sh


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>
Acked-by: Paul Mundt <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/sh/kernel/setup.c linux-2.6.19/arch/sh/kernel/setup.c
--- linux-2.6.19.org/arch/sh/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sh/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -75,7 +75,7 @@ static struct sh_machine_vector* __init
#define RAMDISK_PROMPT_FLAG 0x8000
#define RAMDISK_LOAD_FLAG 0x4000

-static char command_line[COMMAND_LINE_SIZE] = { 0, };
+static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, };

static struct resource code_resource = { .name = "Kernel code", };
static struct resource data_resource = { .name = "Kernel data", };
@@ -91,8 +91,8 @@ static inline void parse_cmdline (char *
int len = 0;

/* Save unparsed command line copy for /proc/cmdline */
- memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';

memory_start = (unsigned long)PAGE_OFFSET+__MEMORY_START;
memory_end = memory_start + __MEMORY_SIZE;

2006-12-02 10:59:53

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 03/26] Dynamic kernel command-line - arm


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/arm/kernel/setup.c linux-2.6.19/arch/arm/kernel/setup.c
--- linux-2.6.19.org/arch/arm/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/arm/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -106,7 +106,7 @@ unsigned long phys_initrd_size __initdat
static struct meminfo meminfo __initdata = { 0, };
static const char *cpu_name;
static const char *machine_name;
-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
@@ -806,8 +806,8 @@ void __init setup_arch(char **cmdline_p)
init_mm.end_data = (unsigned long) &_edata;
init_mm.brk = (unsigned long) &_end;

- memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(cmdline_p, from);
paging_init(&meminfo, mdesc);
request_standard_resources(&meminfo, mdesc);

2006-12-02 11:06:51

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 20/26] Dynamic kernel command-line - sh64


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>
Acked-by: Paul Mundt <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/sh64/kernel/setup.c linux-2.6.19/arch/sh64/kernel/setup.c
--- linux-2.6.19.org/arch/sh64/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/sh64/kernel/setup.c 2006-12-02 11:31:33.000000000 +0200
@@ -83,7 +83,7 @@ extern int sh64_tlb_init(void);
#define RAMDISK_PROMPT_FLAG 0x8000
#define RAMDISK_LOAD_FLAG 0x4000

-static char command_line[COMMAND_LINE_SIZE] = { 0, };
+static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, };
unsigned long long memory_start = CONFIG_MEMORY_START;
unsigned long long memory_end = CONFIG_MEMORY_START + (CONFIG_MEMORY_SIZE_IN_MB * 1024 * 1024);

@@ -95,8 +95,8 @@ static inline void parse_mem_cmdline (ch
int len = 0;

/* Save unparsed command line copy for /proc/cmdline */
- memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ memcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = '\0';

for (;;) {
/*

2006-12-02 11:08:17

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 23/26] Dynamic kernel command-line - um


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/um/include/user_util.h linux-2.6.19/arch/um/include/user_util.h
--- linux-2.6.19.org/arch/um/include/user_util.h 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/um/include/user_util.h 2006-12-02 11:31:33.000000000 +0200
@@ -38,7 +38,7 @@ extern unsigned long long highmem;

extern char host_info[];

-extern char saved_command_line[];
+extern char __initdata boot_command_line[];

extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
extern unsigned long _unprotected_end;
diff -urNp linux-2.6.19.org/arch/um/kernel/um_arch.c linux-2.6.19/arch/um/kernel/um_arch.c
--- linux-2.6.19.org/arch/um/kernel/um_arch.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/um/kernel/um_arch.c 2006-12-02 11:31:33.000000000 +0200
@@ -482,7 +482,7 @@ void __init setup_arch(char **cmdline_p)
atomic_notifier_chain_register(&panic_notifier_list,
&panic_exit_notifier);
paging_init();
- strlcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
+ strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;
setup_hostinfo();
}

2006-12-02 11:08:31

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 08/26] Dynamic kernel command-line - h8300


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/h8300/kernel/setup.c linux-2.6.19/arch/h8300/kernel/setup.c
--- linux-2.6.19.org/arch/h8300/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/h8300/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -54,7 +54,7 @@ unsigned long rom_length;
unsigned long memory_start;
unsigned long memory_end;

-char command_line[COMMAND_LINE_SIZE];
+char __initdata command_line[COMMAND_LINE_SIZE];

extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end;
extern int _ramstart, _ramend;
@@ -154,8 +154,8 @@ void __init setup_arch(char **cmdline_p)
#endif
/* Keep a copy of command line */
*cmdline_p = &command_line[0];
- memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = 0;
+ memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE-1] = 0;

#ifdef DEBUG
if (strlen(*cmdline_p))

2006-12-02 11:09:36

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 06/26] Dynamic kernel command-line - cris


1. Rename saved_command_line into boot_command_line.
2. Set cris_command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/cris/kernel/setup.c linux-2.6.19/arch/cris/kernel/setup.c
--- linux-2.6.19.org/arch/cris/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/cris/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -29,7 +29,7 @@ struct screen_info screen_info;
extern int root_mountflags;
extern char _etext, _edata, _end;

-char cris_command_line[COMMAND_LINE_SIZE] = { 0, };
+char __initdata cris_command_line[COMMAND_LINE_SIZE] = { 0, };

extern const unsigned long text_start, edata; /* set by the linker script */
extern unsigned long dram_start, dram_end;
@@ -153,8 +153,8 @@ setup_arch(char **cmdline_p)
#endif

/* Save command line for future references. */
- memcpy(saved_command_line, cris_command_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
+ memcpy(boot_command_line, cris_command_line, COMMAND_LINE_SIZE);
+ boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';

/* give credit for the CRIS port */
show_etrax_copyright();

2006-12-02 11:09:12

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 07/26] Dynamic kernel command-line - frv


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/frv/kernel/setup.c linux-2.6.19/arch/frv/kernel/setup.c
--- linux-2.6.19.org/arch/frv/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/frv/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -110,7 +110,7 @@ unsigned long __initdata num_mappedpages

struct cpuinfo_frv __nongprelbss boot_cpu_data;

-char command_line[COMMAND_LINE_SIZE];
+char __initdata command_line[COMMAND_LINE_SIZE];
char __initdata redboot_command_line[COMMAND_LINE_SIZE];

#ifdef CONFIG_PM
@@ -762,7 +762,7 @@ void __init setup_arch(char **cmdline_p)
printk("uClinux FR-V port done by Red Hat Inc <[email protected]>\n");
#endif

- memcpy(saved_command_line, redboot_command_line, COMMAND_LINE_SIZE);
+ memcpy(boot_command_line, redboot_command_line, COMMAND_LINE_SIZE);

determine_cpu();
determine_clocks(1);
@@ -803,7 +803,7 @@ void __init setup_arch(char **cmdline_p)
#endif

/* deal with the command line - RedBoot may have passed one to the kernel */
- memcpy(command_line, saved_command_line, sizeof(command_line));
+ memcpy(command_line, boot_command_line, sizeof(command_line));
*cmdline_p = &command_line[0];
parse_cmdline_early(command_line);

2006-12-02 11:08:53

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH 02/26] Dynamic kernel command-line - alpha


1. Rename saved_command_line into boot_command_line.
2. Set command_line as __initdata.

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.19.org/arch/alpha/kernel/setup.c linux-2.6.19/arch/alpha/kernel/setup.c
--- linux-2.6.19.org/arch/alpha/kernel/setup.c 2006-11-29 23:57:37.000000000 +0200
+++ linux-2.6.19/arch/alpha/kernel/setup.c 2006-12-02 11:31:32.000000000 +0200
@@ -122,7 +122,7 @@ static void get_sysnames(unsigned long,
char **, char **);
static void determine_cpu_caches (unsigned int);

-static char command_line[COMMAND_LINE_SIZE];
+static char __initdata command_line[COMMAND_LINE_SIZE];

/*
* The format of "screen_info" is strange, and due to early
@@ -547,7 +547,7 @@ setup_arch(char **cmdline_p)
} else {
strlcpy(command_line, COMMAND_LINE, sizeof command_line);
}
- strcpy(saved_command_line, command_line);
+ strcpy(boot_command_line, command_line);
*cmdline_p = command_line;

/*
@@ -589,7 +589,7 @@ setup_arch(char **cmdline_p)
}

/* Replace the command line, now that we've killed it with strsep. */
- strcpy(command_line, saved_command_line);
+ strcpy(command_line, boot_command_line);

/* If we want SRM console printk echoing early, do it now. */
if (alpha_using_srm && srmcons_output) {

2007-01-27 08:25:52

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH 10/26] Dynamic kernel command-line - ia64

On Tue, 23 Jan 2007 00:14:06 +0200
Alon Bar-Lev <[email protected]> wrote:

>
> 1. Rename saved_command_line into boot_command_line.
> 2. Set command_line as __initdata.
>
> Signed-off-by: Alon Bar-Lev <[email protected]>
>
> ---
>
> diff -urNp linux-2.6.20-rc4-mm1.org/arch/ia64/kernel/efi.c linux-2.6.20-rc4-mm1/arch/ia64/kernel/efi.c
> --- linux-2.6.20-rc4-mm1.org/arch/ia64/kernel/efi.c 2007-01-07 07:45:51.000000000 +0200
> +++ linux-2.6.20-rc4-mm1/arch/ia64/kernel/efi.c 2007-01-22 23:32:30.000000000 +0200
> @@ -413,11 +413,11 @@ efi_init (void)
> efi_char16_t *c16;
> u64 efi_desc_size;
> char *cp, vendor[100] = "unknown";
> - extern char saved_command_line[];
> + extern char __initdata boot_command_line[];
> int i;
>
> chk_nointroute_opt(void)
> {
> char *cp;
> - extern char saved_command_line[];
> + extern char __initdata boot_command_line[];

no no no no no no no. Just because some whacked-out weenie went and put
extern declarations in .c files doesn't mean that we should copy them.

It doesn't even compile.

arch/ia64/kernel/efi.c: In function `efi_init':
arch/ia64/kernel/efi.c:416: error: section attribute cannot be specified for local variables

Please. Go through the entire patchset, yank all those wrong private
declarations of boot_command_line[] and put a *single, kernel-wide*
declaration into a single, shared header file.

Thanks.

2007-01-27 08:34:31

by Alon Bar-Lev

[permalink] [raw]
Subject: Re: [PATCH 10/26] Dynamic kernel command-line - ia64

On 1/27/07, Andrew Morton <[email protected]> wrote:
> no no no no no no no. Just because some whacked-out weenie went and put
> extern declarations in .c files doesn't mean that we should copy them.
>
> It doesn't even compile.

Sorry... I don't have all environments.

> Please. Go through the entire patchset, yank all those wrong private
> declarations of boot_command_line[] and put a *single, kernel-wide*
> declaration into a single, shared header file.

I thought of this, while I was making the patch, I could not understand why
the maintainer did not simply #include <linux/init.h>

I can add this to any module which declares this by-itself but because
I cannot test all arch, I am afraid it will cause more problems.

Preparing a patch... :)

Best Regards,
Alon Bar-Lev.

2007-01-27 08:44:18

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH 10/26] Dynamic kernel command-line - ia64

On Sat, 27 Jan 2007 10:34:27 +0200
"Alon Bar-Lev" <[email protected]> wrote:

> > Please. Go through the entire patchset, yank all those wrong private
> > declarations of boot_command_line[] and put a *single, kernel-wide*
> > declaration into a single, shared header file.
>
> I thought of this, while I was making the patch, I could not understand why
> the maintainer did not simply #include <linux/init.h>

"ooh, I'll get in trouble if I edit a non-arch file, and it's a hassle to
add another file to my changeset and I can't be assed testing other
architectures and nobody's looking so I'll just sneak it in there".

> I can add this to any module which declares this by-itself but because
> I cannot test all arch, I am afraid it will cause more problems.
>
> Preparing a patch... :)

Against next -mm, please.

2007-01-27 20:47:36

by Alon Bar-Lev

[permalink] [raw]
Subject: [PATCH] Dynamic kernel command-line - fixups


Remove in-source externs, linux/init.h is included in all cases.
This is a fixups for "Dynamic kernel command-line" patch.

It includes the ia64 fixup already added.
It also includes some uml __init fixups so that we can __initdata also its command_line.

[[[ I will resubmit it to next mm version as you requested,
I don't mean to bother you. if you find this simple
enough you have an option to include this. ]]]

Signed-off-by: Alon Bar-Lev <[email protected]>

---

diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/ia64/kernel/efi.c linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/ia64/kernel/efi.c
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/ia64/kernel/efi.c 2007-01-22 23:32:30.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/ia64/kernel/efi.c 2007-01-27 21:56:07.000000000 +0200
@@ -413,7 +413,6 @@ efi_init (void)
efi_char16_t *c16;
u64 efi_desc_size;
char *cp, vendor[100] = "unknown";
- extern char __initdata boot_command_line[];
int i;

/* it's too early to be able to use the standard kernel command line support... */
diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/ia64/kernel/sal.c linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/ia64/kernel/sal.c
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/ia64/kernel/sal.c 2007-01-22 23:32:30.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/ia64/kernel/sal.c 2007-01-27 21:57:07.000000000 +0200
@@ -194,7 +194,6 @@ static void __init
chk_nointroute_opt(void)
{
char *cp;
- extern char __initdata boot_command_line[];

for (cp = boot_command_line; *cp; ) {
if (memcmp(cp, "nointroute", 10) == 0) {
diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/parisc/mm/init.c linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/parisc/mm/init.c
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/parisc/mm/init.c 2007-01-22 23:32:30.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/parisc/mm/init.c 2007-01-27 22:06:51.000000000 +0200
@@ -77,7 +77,6 @@ static void __init mem_limit_func(void)
{
char *cp, *end;
unsigned long limit;
- extern char __initdata boot_command_line[];

/* We need this before __setup() functions are called */

diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/um/include/user_util.h linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/um/include/user_util.h
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/um/include/user_util.h 2007-01-22 23:32:31.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/um/include/user_util.h 2007-01-27 21:57:41.000000000 +0200
@@ -38,8 +38,6 @@ extern unsigned long long highmem;

extern char host_info[];

-extern char __initdata boot_command_line[];
-
extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
extern unsigned long _unprotected_end;
extern unsigned long brk_start;
diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/um/kernel/um_arch.c linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/um/kernel/um_arch.c
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/um/kernel/um_arch.c 2007-01-22 23:32:31.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/um/kernel/um_arch.c 2007-01-27 22:28:48.000000000 +0200
@@ -44,9 +44,9 @@
#define DEFAULT_COMMAND_LINE "root=98:0"

/* Changed in linux_main and setup_arch, which run before SMP is started */
-static char command_line[COMMAND_LINE_SIZE] = { 0 };
+static char __initdata command_line[COMMAND_LINE_SIZE] = { 0 };

-static void add_arg(char *arg)
+static void __init add_arg(char *arg)
{
if (strlen(command_line) + strlen(arg) + 1 > COMMAND_LINE_SIZE) {
printf("add_arg: Too many command line arguments!\n");
@@ -331,7 +331,7 @@ EXPORT_SYMBOL(end_iomem);

extern char __binary_start;

-int linux_main(int argc, char **argv)
+int __init linux_main(int argc, char **argv)
{
unsigned long avail, diff;
unsigned long virtmem_size, max_physmem;
diff -urNp linux-2.6.20-rc4-mm1.dyn-cmdline/arch/x86_64/kernel/head64.c linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/x86_64/kernel/head64.c
--- linux-2.6.20-rc4-mm1.dyn-cmdline/arch/x86_64/kernel/head64.c 2007-01-22 23:32:31.000000000 +0200
+++ linux-2.6.20-rc4-mm1.dyn-cmdline.fixups/arch/x86_64/kernel/head64.c 2007-01-27 21:57:26.000000000 +0200
@@ -34,8 +34,6 @@ static void __init clear_bss(void)
#define OLD_CL_BASE_ADDR 0x90000
#define OLD_CL_OFFSET 0x90022

-extern char __initdata boot_command_line[];
-
static void __init copy_bootdata(char *real_mode_data)
{
int new_data;