]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Do not drop kernel cmdline for xen pv domains
authorJim Fehlig <jfehlig@novell.com>
Thu, 7 Jul 2011 01:17:16 +0000 (19:17 -0600)
committerJim Fehlig <jfehlig@novell.com>
Mon, 11 Jul 2011 15:11:15 +0000 (09:11 -0600)
Kernel cmdline args can be passed to xen pv domains even when a
bootloader is specified.  The current config-to-sxpr mapping
ignores cmdline when bootloader is present.

Since the xend sub-driver is used with many xen toolstack versions,
this patch takes conservative approach of adding an else block to
existing !def->os.bootloader, and only appends sxpr if def->os.cmdline
is non-NULL.

V2: Fix existing testcase broken by this patch and add new testcases

docs/schemas/domain.rng
src/xenxs/xen_sxpr.c
tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.xml [new file with mode: 0644]
tests/sexpr2xmltest.c
tests/xml2sexprdata/xml2sexpr-disk-block-shareable.sexpr
tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.xml [new file with mode: 0644]
tests/xml2sexprtest.c

index ba31263a08b000390a9733e746b6efc79328ad4e..8a4e3fe2612839a6feba398a618ba76367773ed4 100644 (file)
   </define>
   <define name="osbootkernel">
     <interleave>
-      <element name="kernel">
-        <ref name="absFilePath"/>
-      </element>
+      <optional>
+        <element name="kernel">
+          <ref name="absFilePath"/>
+        </element>
+      </optional>
       <optional>
         <element name="initrd">
           <ref name="absFilePath"/>
index 13ca015577844cec2db4f83bd223c471aef48d9c..bd770bc261a55426dddad7d9181c15c28705b9d4 100644 (file)
@@ -2261,6 +2261,12 @@ xenFormatSxpr(virConnectPtr conn,
         }
 
         virBufferAddLit(&buf, "))");
+    } else {
+        /* PV domains accept kernel cmdline args */
+        if (def->os.cmdline) {
+            virBufferEscapeSexpr(&buf, "(image (linux (args '%s')))",
+                                 def->os.cmdline);
+        }
     }
 
     for (i = 0 ; i < def->ndisks ; i++)
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.sexpr b/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.sexpr
new file mode 100644 (file)
index 0000000..67c9a60
--- /dev/null
@@ -0,0 +1,5 @@
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)\
+(uuid '596a5d2171f48fb2e068e2386a5c413e')(bootloader '/usr/bin/pygrub')\
+(bootloader_args '-q')(image (linux (args 'xenfb.video=8,1280,1024')))\
+(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')\
+(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.xml b/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.xml
new file mode 100644 (file)
index 0000000..b336d77
--- /dev/null
@@ -0,0 +1,27 @@
+<domain type='xen' id='6'>
+  <name>pvtest</name>
+  <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
+  <memory>430080</memory>
+  <currentMemory>430080</currentMemory>
+  <vcpu>2</vcpu>
+  <bootloader>/usr/bin/pygrub</bootloader>
+  <bootloader_args>-q</bootloader_args>
+  <os>
+    <type>linux</type>
+    <cmdline>xenfb.video=8,1280,1024</cmdline>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <driver name='file'/>
+      <source file='/root/some.img'/>
+      <target dev='xvda' bus='xen'/>
+    </disk>
+    <console type='pty'>
+      <target type='xen' port='0'/>
+    </console>
+  </devices>
+</domain>
index f393935a73d1c7fbac70b2f22b589ca2b177aa62..26a987dbcebc4b0a078a2ca7fdb119e6661bccc0 100644 (file)
@@ -134,6 +134,7 @@ mymain(void)
     DO_TEST("pv-vfb-type-crash", "pv-vfb-type-crash", 3);
     DO_TEST("fv-autoport", "fv-autoport", 3);
     DO_TEST("pv-bootloader", "pv-bootloader", 1);
+    DO_TEST("pv-bootloader-cmdline", "pv-bootloader-cmdline", 1);
     DO_TEST("pv-vcpus", "pv-vcpus", 1);
 
     DO_TEST("disk-file", "disk-file", 2);
index 8c0b1cdff416701186451eba0351a0078f99e324..b8387e597eb71c18bf47f36d3274b5df722f624d 100644 (file)
@@ -1,6 +1,7 @@
 (vm (name 'pvtest')(memory 384)(maxmem 512)(vcpus 1)\
 (uuid '49a0c6ff-c066-5392-6498-3632d093c2e7')(bootloader '/usr/bin/pygrub')\
 (on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')\
+(image (linux (args 'ro root=/dev/VolGroup00/LogVol00')))\
 (device (tap (dev 'xvda')(uname 'tap:aio:/var/lib/xen/images/rhel5pv.img')\
 (mode 'w!')))(device (vif (mac '00:16:3e:23:9e:eb')(bridge 'xenbr0')\
 (script 'vif-bridge'))))\
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.sexpr b/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.sexpr
new file mode 100644 (file)
index 0000000..236017e
--- /dev/null
@@ -0,0 +1,5 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)\
+(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(bootloader '/usr/bin/pygrub')\
+(bootloader_args '-q')(on_poweroff 'destroy')(on_reboot 'destroy')\
+(on_crash 'destroy')(image (linux (args 'xenfb.video=8,1280,1024')))\
+(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))\
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.xml b/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.xml
new file mode 100644 (file)
index 0000000..40bff6b
--- /dev/null
@@ -0,0 +1,22 @@
+<domain type='xen' id='15'>
+  <name>pvtest</name>
+  <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+  <bootloader>/usr/bin/pygrub</bootloader>
+  <bootloader_args>-q</bootloader_args>
+ <os>
+    <type>linux</type>
+    <cmdline>xenfb.video=8,1280,1024</cmdline>
+  </os>
+  <memory>430080</memory>
+  <vcpu>2</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <source file='/root/some.img'/>
+      <target dev='xvda'/>
+    </disk>
+    <console tty='/dev/pts/4'/>
+  </devices>
+</domain>
index d8cdcbbe5b26d547d5e935759fbb219e69de93dc..e068e696a1a83d9db657614259c690dccf911d8d 100644 (file)
@@ -116,6 +116,7 @@ mymain(void)
     DO_TEST("pv-vfb-new", "pv-vfb-new", "pvtest", 3);
     DO_TEST("pv-vfb-new-auto", "pv-vfb-new-auto", "pvtest", 3);
     DO_TEST("pv-bootloader", "pv-bootloader", "pvtest", 1);
+    DO_TEST("pv-bootloader-cmdline", "pv-bootloader-cmdline", "pvtest", 1);
     DO_TEST("pv-vcpus", "pv-vcpus", "pvtest", 1);
 
     DO_TEST("disk-file", "disk-file", "pvtest", 2);