Do not drop kernel cmdline for xen pv domains

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
This commit is contained in:
Jim Fehlig 2011-07-06 19:17:16 -06:00
parent 8a8b45b889
commit eb3143154e
9 changed files with 73 additions and 3 deletions

View File

@ -556,9 +556,11 @@
</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"/>

View 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++)

View File

@ -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'))))

View File

@ -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>

View 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);

View 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'))))\

View File

@ -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'))))\

View File

@ -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>

View 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);