[PATCH v1 2/3] xenconfig: add conversion of domxml nestedhvm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Joao Martins <joao.m.martins@xxxxxxxxxx>

In other words, on configurations containing (within its
CPU element) one of the following for a host-passthrough
mode:

<feature policy='require' name='vmx'/>
<feature policy='require' name='svm'/>

It will then generate (or parse) for nestedhvm=1 in/from xl format.

Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx>
Signed-off-by: Wim ten Have <wim.ten.have@xxxxxxxxxx>
---
 src/xenconfig/xen_xl.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
index 74f68b3..738dcd0 100644
--- a/src/xenconfig/xen_xl.c
+++ b/src/xenconfig/xen_xl.c
@@ -106,6 +106,7 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
     if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
         const char *bios;
         const char *boot;
+        int val;
 
         if (xenConfigGetString(conf, "bios", &bios, NULL) < 0)
             return -1;
@@ -164,6 +165,35 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
             }
             def->os.nBootDevs++;
         }
+
+        if (xenConfigGetBool(conf, "nestedhvm", &val, 0) < 0) {
+            return -1;
+        } else if (val) {
+            virCPUDefPtr cpu = NULL;
+
+            if (VIR_ALLOC(cpu) < 0)
+                return -1;
+
+            if (VIR_ALLOC_N(cpu->features, 1) < 0)
+                goto cleanup;
+
+            cpu->features[0].policy = VIR_CPU_FEATURE_REQUIRE;
+            if (VIR_STRDUP(cpu->features[0].name, "vmx") < 0)
+                goto cleanup;
+
+            cpu->nfeatures = cpu->nfeatures_max = 1;
+            cpu->mode = VIR_CPU_MODE_HOST_PASSTHROUGH;
+            cpu->type = VIR_CPU_TYPE_GUEST;
+            def->cpu = cpu;
+            cpu = NULL;
+
+ cleanup:
+            if (cpu) {
+                VIR_FREE(cpu->features);
+                VIR_FREE(cpu);
+                return -1;
+            }
+        }
     } else {
         if (xenConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0)
             return -1;
@@ -897,6 +927,17 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def)
         if (xenConfigSetString(conf, "boot", boot) < 0)
             return -1;
 
+        if (def->cpu && def->cpu->nfeatures) {
+            for (i = 0; i < def->cpu->nfeatures; i++) {
+                if (def->cpu->features[i].policy == VIR_CPU_FEATURE_REQUIRE &&
+                    (STREQ(def->cpu->features[i].name, "vmx") ||
+                     STREQ(def->cpu->features[i].name, "svm")))
+                    if (xenConfigSetInt(conf, "nestedhvm", 1) < 0)
+                        return -1;
+            }
+        }
+
+
         /* XXX floppy disks */
     } else {
         if (def->os.bootloader &&
-- 
2.9.3

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux