Re: [Qemu-devel] [RFC PATCH V5 2/3] xl.cfg: add 'cmdline' in config file

2014-07-10 Thread Ian Campbell
On Mon, 2014-07-07 at 14:34 +0800, Chunyan Liu wrote:
 Currently in xl.cfg, use 'root' and 'extra' to generate the command
 line. 'cmdline' could be a more generic equivalent. So, add 'cmdline'
 in xl.cfg and let it be preferred. 'root' and 'extra' still works.
 But when 'cmdline' is specified, 'root' and 'extra' will be ignored.
 
 [HVM config example]
 [snip]
 builder=hvm
 device_model_override=/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64
 kernel=/mnt/vmlinuz-3.0.13-0.27-default
 ramdisk=/mnt/initrd-3.0.13-0.27-default
 root=/dev/hda2
 extra=console=tty0 console=ttyS0
 [snip]
 
 or:
 
 [snip]
 builder=hvm
 device_model_override=/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64
 kernel=/mnt/vmlinuz-3.0.13-0.27-default
 ramdisk=/mnt/initrd-3.0.13-0.27-default
 cmdline=root=/dev/hda2 console=tty0 console=ttyS0
 [snip]
 
 
 Signed-off-by: Chunyan Liu cy...@suse.com

Acked-by: Ian Campbell ian.campb...@citrix.com





[Qemu-devel] [RFC PATCH V5 2/3] xl.cfg: add 'cmdline' in config file

2014-07-07 Thread Chunyan Liu
Currently in xl.cfg, use 'root' and 'extra' to generate the command
line. 'cmdline' could be a more generic equivalent. So, add 'cmdline'
in xl.cfg and let it be preferred. 'root' and 'extra' still works.
But when 'cmdline' is specified, 'root' and 'extra' will be ignored.

[HVM config example]
[snip]
builder=hvm
device_model_override=/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64
kernel=/mnt/vmlinuz-3.0.13-0.27-default
ramdisk=/mnt/initrd-3.0.13-0.27-default
root=/dev/hda2
extra=console=tty0 console=ttyS0
[snip]

or:

[snip]
builder=hvm
device_model_override=/home/cyliu/git/qemu/x86_64-softmmu/qemu-system-x86_64
kernel=/mnt/vmlinuz-3.0.13-0.27-default
ramdisk=/mnt/initrd-3.0.13-0.27-default
cmdline=root=/dev/hda2 console=tty0 console=ttyS0
[snip]


Signed-off-by: Chunyan Liu cy...@suse.com
---
Changes:
  - add back the 'cmdline' in xl.cfg, but as separate patch

 docs/man/xl.cfg.pod.5|  7 +++
 tools/libxl/xl_cmdimpl.c | 20 ++--
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index c4a6589..cb5b76b 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -323,6 +323,13 @@ Load the specified file as the kernel image.
 
 Load the specified file as the ramdisk.
 
+=item Bcmdline=STRING
+
+Append Bcmdline=STRING to the kernel command line. (Note: it is
+guest specific what meaning this has). It can replace Broot=STRING
+plus Bextra=STRING and is preferred. When Bcmdline=STRING is set,
+Broot=STRING and Bextra=STRING will be ignored.
+
 =item Broot=STRING
 
 Append Broot=STRING to the kernel command line (Note: it is guest
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index d4cd50b..cfe13e3 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -693,19 +693,27 @@ static void parse_top_level_sdl_options(XLU_Config 
*config,
 static char *parse_cmdline(XLU_Config *config)
 {
 char *cmdline = NULL;
-const char *root = NULL, *extra = ;
+const char *root = NULL, *extra = NULL, *buf = NULL;
 
+xlu_cfg_get_string (config, cmdline, buf, 0);
 xlu_cfg_get_string (config, root, root, 0);
 xlu_cfg_get_string (config, extra, extra, 0);
 
-if (root) {
-if (asprintf(cmdline, root=%s %s, root, extra) == -1)
-cmdline = NULL;
+if (buf) {
+cmdline = strdup(buf);
+if (root || extra)
+fprintf(stderr, Warning: ignoring root= and extra= 
+in favour of cmdline=\n);
 } else {
-cmdline = strdup(extra);
+if (root) {
+if (asprintf(cmdline, root=%s %s, root, extra) == -1)
+cmdline = NULL;
+} else if (extra) {
+cmdline = strdup(extra);
+}
 }
 
-if ((root || extra)  !cmdline) {
+if ((buf || root || extra)  !cmdline) {
 fprintf(stderr, Failed to allocate memory for cmdline\n);
 exit(1);
 }
-- 
1.8.4.5