]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add support for HAP feature to xen drivers
authorJim Fehlig <jfehlig@novell.com>
Wed, 5 Jan 2011 22:16:57 +0000 (15:16 -0700)
committerJim Fehlig <jfehlig@novell.com>
Thu, 13 Jan 2011 16:30:26 +0000 (09:30 -0700)
xen-unstable c/s 16931 introduced a per-domain setting for hvm
guests to enable/disable hardware assisted paging.  If disabled,
software techniques such as shadow page tables are used.  If enabled,
and the feature exists in underlying hardware, hardware support for
paging is used.

This provides implementation for mapping HAP setting to/from
domxml/native formats in xen drivers.

src/xen/xend_internal.c
src/xen/xm_internal.c
src/xenapi/xenapi_driver.c
src/xenapi/xenapi_utils.c

index 6ce0c3fe7db84274c2019785fa7fa45a6adb4f58..d3633ee889679a492dd273cb32941ca949baaaa9 100644 (file)
@@ -2210,6 +2210,8 @@ xenDaemonParseSxpr(virConnectPtr conn,
             def->features |= (1 << VIR_DOMAIN_FEATURE_APIC);
         if (sexpr_int(root, "domain/image/hvm/pae"))
             def->features |= (1 << VIR_DOMAIN_FEATURE_PAE);
+        if (sexpr_int(root, "domain/image/hvm/hap"))
+            def->features |= (1 << VIR_DOMAIN_FEATURE_HAP);
 
         /* Old XenD only allows localtime here for HVM */
         if (sexpr_int(root, "domain/image/hvm/localtime"))
@@ -5923,6 +5925,8 @@ xenDaemonFormatSxpr(virConnectPtr conn,
                 virBufferAddLit(&buf, "(apic 1)");
             if (def->features & (1 << VIR_DOMAIN_FEATURE_PAE))
                 virBufferAddLit(&buf, "(pae 1)");
+            if (def->features & (1 << VIR_DOMAIN_FEATURE_HAP))
+                virBufferAddLit(&buf, "(hap 1)");
 
             virBufferAddLit(&buf, "(usb 1)");
 
index 4d6b41b0326f7e3c4c616e3cf7b65f1b4fa83762..ec618aa428dbb09657a824172fb0a2d1910d36bf 100644 (file)
@@ -830,6 +830,10 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
             goto cleanup;
         else if (val)
             def->features |= (1 << VIR_DOMAIN_FEATURE_APIC);
+        if (xenXMConfigGetBool(conf, "hap", &val, 0) < 0)
+            goto cleanup;
+        else if (val)
+            def->features |= (1 << VIR_DOMAIN_FEATURE_HAP);
     }
     if (xenXMConfigGetBool(conf, "localtime", &vmlocaltime, 0) < 0)
         goto cleanup;
@@ -2409,6 +2413,10 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn,
                                (1 << VIR_DOMAIN_FEATURE_APIC)) ? 1 : 0) < 0)
             goto no_memory;
 
+        if (xenXMConfigSetInt(conf, "hap",
+                              (def->features &
+                               (1 << VIR_DOMAIN_FEATURE_HAP)) ? 1 : 0) < 0)
+            goto no_memory;
 
         if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME) {
             if (def->clock.data.timezone) {
index 6fff276806327e97f7afd7fd2d3d2399c062ffd6..fffa6170f8e1c6c3f1a94c7868e7e6be9905ccc5 100644 (file)
@@ -1358,6 +1358,8 @@ xenapiDomainDumpXML (virDomainPtr dom, int flags ATTRIBUTE_UNUSED)
                     defPtr->features = defPtr->features | (1<<VIR_DOMAIN_FEATURE_APIC);
                 else if (STREQ(result->contents[i].key, "pae"))
                     defPtr->features = defPtr->features | (1<<VIR_DOMAIN_FEATURE_PAE);
+                else if (STREQ(result->contents[i].key, "hap"))
+                    defPtr->features = defPtr->features | (1<<VIR_DOMAIN_FEATURE_HAP);
             }
         }
         xen_string_string_map_free(result);
index a7e2a4bcd5311b96000fee39f22fb97eb8675ce5..2ec5f9e3a4ec8787101d421ab56663627ff1c9e7 100644 (file)
@@ -529,6 +529,8 @@ createVMRecordFromXml (virConnectPtr conn, virDomainDefPtr def,
             allocStringMap(&strings, (char *)"apic", (char *)"true");
         if (def->features & (1 << VIR_DOMAIN_FEATURE_PAE))
             allocStringMap(&strings, (char *)"pae", (char *)"true");
+        if (def->features & (1 << VIR_DOMAIN_FEATURE_HAP))
+            allocStringMap(&strings, (char *)"hap", (char *)"true");
     }
     if (strings != NULL)
         (*record)->platform = strings;