mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-13 00:46:03 -06:00
Add support for HAP feature to xen drivers
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.
This commit is contained in:
parent
48a5dccda9
commit
041973504f
@ -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)");
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user