Wim Ten Have wrote: > From: Wim ten Have <wim.ten.have@xxxxxxxxxx> > > Testing various configuration schemas targeting postive and negative > nestedhvm under libvirt <cpu mode="host-passthrough"> configuration. > > Mode "host-passthrough" generates nestedhvm=1 in/from xl format where > > Intel virtualization (VT-x): > <feature policy='disable' name='vmx'/> > > or > > AMD virtualization (AMD-V): > <feature policy='disable' name='svm'/> > > disables virtualization mode under guest domains. > > Signed-off-by: Wim ten Have <wim.ten.have@xxxxxxxxxx> > --- > .../test-fullvirt-nestedhvm-disabled.cfg | 26 +++++++++ > .../test-fullvirt-nestedhvm-disabled.xml | 61 ++++++++++++++++++++++ > tests/xlconfigdata/test-fullvirt-nestedhvm.cfg | 26 +++++++++ > tests/xlconfigdata/test-fullvirt-nestedhvm.xml | 59 +++++++++++++++++++++ > tests/xlconfigtest.c | 2 + > 5 files changed, 174 insertions(+) > create mode 100644 tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.cfg > create mode 100644 tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.xml > create mode 100644 tests/xlconfigdata/test-fullvirt-nestedhvm.cfg > create mode 100644 tests/xlconfigdata/test-fullvirt-nestedhvm.xml > > diff --git a/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.cfg b/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.cfg > new file mode 100644 > index 0000000..d4b9f45 > --- /dev/null > +++ b/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.cfg > @@ -0,0 +1,26 @@ > +name = "XenGuest2" > +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" > +maxmem = 579 > +memory = 394 > +vcpus = 1 > +pae = 1 > +acpi = 1 > +apic = 1 > +viridian = 0 > +rtc_timeoffset = 0 > +localtime = 0 > +on_poweroff = "destroy" > +on_reboot = "restart" > +on_crash = "restart" > +device_model = "/usr/lib/xen/bin/qemu-system-i386" > +sdl = 0 > +vnc = 1 > +vncunused = 1 > +vnclisten = "127.0.0.1" > +vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000" ] > +parallel = "none" > +serial = "none" > +builder = "hvm" > +boot = "d" > +nestedhvm = 0 > +disk = [ "format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2", "format=qcow2,vdev=hdb,access=rw,backendtype=qdisk,target=/var/lib/libvirt/images/XenGuest2-home", "format=raw,vdev=hdc,access=ro,backendtype=qdisk,devtype=cdrom,target=/root/boot.iso" ] > diff --git a/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.xml b/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.xml > new file mode 100644 > index 0000000..58b6338 > --- /dev/null > +++ b/tests/xlconfigdata/test-fullvirt-nestedhvm-disabled.xml > @@ -0,0 +1,61 @@ > +<domain type='xen'> > + <name>XenGuest2</name> > + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>592896</memory> > + <currentMemory unit='KiB'>403456</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='x86_64' machine='xenfv'>hvm</type> > + <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader> > + <boot dev='cdrom'/> > + </os> > + <features> > + <acpi/> > + <apic/> > + <pae/> > + </features> > + <cpu mode='host-passthrough'> > + <feature policy='disable' name='vmx'/> > + </cpu> > + <clock offset='variable' adjustment='0' basis='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>restart</on_crash> > + <devices> > + <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator> > + <disk type='block' device='disk'> > + <driver name='phy' type='raw'/> > + <source dev='/dev/HostVG/XenGuest2'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2'/> > + <source file='/var/lib/libvirt/images/XenGuest2-home'/> > + <target dev='hdb' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='1'/> > + </disk> > + <disk type='file' device='cdrom'> > + <driver name='qemu' type='raw'/> > + <source file='/root/boot.iso'/> > + <target dev='hdc' bus='ide'/> > + <readonly/> > + <address type='drive' controller='0' bus='1' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <interface type='bridge'> > + <mac address='00:16:3e:66:92:9c'/> > + <source bridge='xenbr1'/> > + <script path='vif-bridge'/> > + <model type='e1000'/> > + </interface> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> > + <listen type='address' address='127.0.0.1'/> > + </graphics> > + <video> > + <model type='cirrus' vram='8192' heads='1' primary='yes'/> > + </video> > + </devices> > +</domain> > diff --git a/tests/xlconfigdata/test-fullvirt-nestedhvm.cfg b/tests/xlconfigdata/test-fullvirt-nestedhvm.cfg > new file mode 100644 > index 0000000..281f126 > --- /dev/null > +++ b/tests/xlconfigdata/test-fullvirt-nestedhvm.cfg > @@ -0,0 +1,26 @@ > +name = "XenGuest2" > +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" > +maxmem = 579 > +memory = 394 > +vcpus = 1 > +pae = 1 > +acpi = 1 > +apic = 1 > +viridian = 0 > +rtc_timeoffset = 0 > +localtime = 0 > +on_poweroff = "destroy" > +on_reboot = "restart" > +on_crash = "restart" > +device_model = "/usr/lib/xen/bin/qemu-system-i386" > +sdl = 0 > +vnc = 1 > +vncunused = 1 > +vnclisten = "127.0.0.1" > +vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000" ] > +parallel = "none" > +serial = "none" > +builder = "hvm" > +boot = "d" > +nestedhvm = 1 > +disk = [ "format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2", "format=qcow2,vdev=hdb,access=rw,backendtype=qdisk,target=/var/lib/libvirt/images/XenGuest2-home", "format=raw,vdev=hdc,access=ro,backendtype=qdisk,devtype=cdrom,target=/root/boot.iso" ] > diff --git a/tests/xlconfigdata/test-fullvirt-nestedhvm.xml b/tests/xlconfigdata/test-fullvirt-nestedhvm.xml > new file mode 100644 > index 0000000..8c02e7a > --- /dev/null > +++ b/tests/xlconfigdata/test-fullvirt-nestedhvm.xml > @@ -0,0 +1,59 @@ > +<domain type='xen'> > + <name>XenGuest2</name> > + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>592896</memory> > + <currentMemory unit='KiB'>403456</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='x86_64' machine='xenfv'>hvm</type> > + <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader> > + <boot dev='cdrom'/> > + </os> > + <features> > + <acpi/> > + <apic/> > + <pae/> > + </features> > + <cpu mode='host-passthrough'/> > + <clock offset='variable' adjustment='0' basis='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>restart</on_crash> > + <devices> > + <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator> > + <disk type='block' device='disk'> > + <driver name='phy' type='raw'/> > + <source dev='/dev/HostVG/XenGuest2'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2'/> > + <source file='/var/lib/libvirt/images/XenGuest2-home'/> > + <target dev='hdb' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='1'/> > + </disk> > + <disk type='file' device='cdrom'> > + <driver name='qemu' type='raw'/> > + <source file='/root/boot.iso'/> > + <target dev='hdc' bus='ide'/> > + <readonly/> > + <address type='drive' controller='0' bus='1' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <interface type='bridge'> > + <mac address='00:16:3e:66:92:9c'/> > + <source bridge='xenbr1'/> > + <script path='vif-bridge'/> > + <model type='e1000'/> > + </interface> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> > + <listen type='address' address='127.0.0.1'/> > + </graphics> > + <video> > + <model type='cirrus' vram='8192' heads='1' primary='yes'/> > + </video> > + </devices> > +</domain> > diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c > index e74e4d6..2fee449 100644 > --- a/tests/xlconfigtest.c > +++ b/tests/xlconfigtest.c > @@ -268,6 +268,8 @@ mymain(void) > DO_TEST("fullvirt-hpet-timer"); > DO_TEST("fullvirt-tsc-timer"); > DO_TEST("fullvirt-multi-timer"); > + DO_TEST("fullvirt-nestedhvm"); > + DO_TEST("fullvirt-nestedhvm-disabled"); Note that if you take my advice in patch 2 and explicitly look for 'vmx' and 'svm' features in caps, you'll need to add a cpu with some features in testXLInitCaps() when creating the caps. E.g. the below diff to tests/testutilsxen.c Regards, Jim diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c index 122789c25..266e916f2 100644 --- a/tests/testutilsxen.c +++ b/tests/testutilsxen.c @@ -6,6 +6,33 @@ #include "testutilsxen.h" #include "domain_conf.h" +static virCPUFeatureDef cpuDefaultFeatures[] = { + { (char *) "ds", -1 }, + { (char *) "acpi", -1 }, + { (char *) "ss", -1 }, + { (char *) "ht", -1 }, + { (char *) "tm", -1 }, + { (char *) "pbe", -1 }, + { (char *) "ds_cpl", -1 }, + { (char *) "vmx", -1 }, + { (char *) "est", -1 }, + { (char *) "tm2", -1 }, + { (char *) "cx16", -1 }, + { (char *) "xtpr", -1 }, + { (char *) "lahf_lm", -1 }, +}; +static virCPUDef cpuDefaultData = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_X86_64, + .model = (char *) "core2duo", + .vendor = (char *) "Intel", + .sockets = 1, + .cores = 2, + .threads = 1, + .nfeatures = ARRAY_CARDINALITY(cpuDefaultFeatures), + .nfeatures_max = ARRAY_CARDINALITY(cpuDefaultFeatures), + .features = cpuDefaultFeatures, +}; virCapsPtr testXenCapsInit(void) { @@ -85,9 +112,12 @@ testXLInitCaps(void) "xenpv" }; - if ((caps = virCapabilitiesNew(virArchFromHost(), + if ((caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false)) == NULL) return NULL; + + caps->host.cpu = virCPUDefCopy(&cpuDefaultData); + -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list