[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] kernel command line extension
In order to allow appending to the dom0 command line even with boot loaders that only allow editing the kernel (i.e. Xen in our case) command line, support a '--' separator option. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> Index: 2007-06-18/xen/arch/x86/setup.c =================================================================== --- 2007-06-18.orig/xen/arch/x86/setup.c 2007-06-19 11:13:50.000000000 +0200 +++ 2007-06-18/xen/arch/x86/setup.c 2007-06-19 11:26:17.000000000 +0200 @@ -405,7 +405,7 @@ void init_done(void) void __init __start_xen(unsigned long mbi_p) { char *memmap_type = NULL; - char __cmdline[] = "", *cmdline = __cmdline; + char __cmdline[] = "", *cmdline = __cmdline, *kextra; unsigned long _initrd_start = 0, _initrd_len = 0; unsigned int initrdidx = 1; char *_policy_start = NULL; @@ -425,7 +425,7 @@ void __init __start_xen(multiboot_info_t /* Parse the command-line options. */ if ( (mbi->flags & MBI_CMDLINE) && (mbi->cmdline != 0) ) cmdline = __va(mbi->cmdline); - cmdline_parse(cmdline); + kextra = cmdline_parse(cmdline); parse_video_info(); @@ -1005,19 +1005,27 @@ void __init __start_xen(multiboot_info_t /* Grab the DOM0 command line. */ cmdline = (char *)(mod[0].string ? __va(mod[0].string) : NULL); - if ( cmdline != NULL ) + if ( cmdline != NULL || kextra != NULL ) { static char dom0_cmdline[MAX_GUEST_CMDLINE]; - /* Skip past the image name and copy to a local buffer. */ - while ( *cmdline == ' ' ) cmdline++; - if ( (cmdline = strchr(cmdline, ' ')) != NULL ) + if ( cmdline != NULL ) { + /* Skip past the image name and copy to a local buffer. */ while ( *cmdline == ' ' ) cmdline++; - safe_strcpy(dom0_cmdline, cmdline); + if ( (cmdline = strchr(cmdline, ' ')) != NULL ) + { + while ( *cmdline == ' ' ) cmdline++; + safe_strcpy(dom0_cmdline, cmdline); + } } + else + dom0_cmdline[0] = '\0'; /* Append any extra parameters. */ + if ( kextra != NULL ) + /* Note that kextra already includes a leading space. */ + safe_strcat(dom0_cmdline, kextra); if ( skip_ioapic_setup && !strstr(dom0_cmdline, "noapic") ) safe_strcat(dom0_cmdline, " noapic"); if ( acpi_skip_timer_override && Index: 2007-06-18/xen/common/kernel.c =================================================================== --- 2007-06-18.orig/xen/common/kernel.c 2007-06-18 12:03:19.000000000 +0200 +++ 2007-06-18/xen/common/kernel.c 2007-06-18 12:15:35.000000000 +0200 @@ -24,20 +24,20 @@ int tainted; -void cmdline_parse(char *cmdline) +char *cmdline_parse(char *cmdline) { char opt[100], *optval, *q; const char *p = cmdline; struct kernel_param *param; if ( p == NULL ) - return; + return (char *)p; /* Skip whitespace and the image name. */ while ( *p == ' ' ) p++; if ( (p = strchr(p, ' ')) == NULL ) - return; + return (char *)p; for ( ; ; ) { @@ -57,6 +57,9 @@ void cmdline_parse(char *cmdline) } *q = '\0'; + if ( strcmp(opt, "--") == 0 ) + return (char *)p; + /* Search for value part of a key=value option. */ optval = strchr(opt, '='); if ( optval != NULL ) @@ -87,6 +90,8 @@ void cmdline_parse(char *cmdline) } } } + + return NULL; } /** Index: 2007-06-18/xen/include/xen/lib.h =================================================================== --- 2007-06-18.orig/xen/include/xen/lib.h 2007-06-19 11:25:18.000000000 +0200 +++ 2007-06-18/xen/include/xen/lib.h 2007-06-18 12:15:35.000000000 +0200 @@ -43,7 +43,7 @@ do { struct domain; -void cmdline_parse(char *cmdline); +char *cmdline_parse(char *cmdline); /*#define DEBUG_TRACE_DUMP*/ #ifdef DEBUG_TRACE_DUMP _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |