Most hypervisors use Hardware Assisted Paging by default and don't require specifying the feature in domain conf. But some hypervisors support disabling HAP on a per-domain basis. To enable HAP by default yet provide a knob to disable it, extend the <hap> feature with a 'state=on|off' attribute, similar to <pvspinlock> and <vmport> features. In the absence of <hap>, the hypervisor default (on) is used. <hap> without the state attribute would be the same as <hap state='on'/> for backwards compatibility. And of course <hap state='off'/> disables hap. Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> --- docs/formatdomain.html.in | 6 ++++-- docs/schemas/domaincommon.rng | 6 +++++- src/conf/domain_conf.c | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 5016772..c06bcf3 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1494,8 +1494,10 @@ Interrupt) for the guest. </dd> <dt><code>hap</code></dt> - <dd>Enable use of Hardware Assisted Paging if available in - the hardware. + <dd>Depending on the <code>state</code> attribute (values <code>on</code>, + <code>off</code>) enable or disable use of Hardware Assisted Paging. + The default is <code>on</code> if the hypervisor detects availability + of Hardware Assisted Paging. </dd> <dt><code>viridian</code></dt> <dd>Enable Viridian hypervisor extensions for paravirtualizing diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 67af93a..dd6e93a 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -4108,7 +4108,11 @@ </optional> <optional> <element name="hap"> - <empty/> + <optional> + <attribute name="state"> + <ref name="virOnOff"/> + </attribute> + </optional> </element> </optional> <optional> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 79758d4..714bbfc 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -15296,7 +15296,6 @@ virDomainDefParseXML(xmlDocPtr xml, /* fallthrough */ case VIR_DOMAIN_FEATURE_ACPI: case VIR_DOMAIN_FEATURE_PAE: - case VIR_DOMAIN_FEATURE_HAP: case VIR_DOMAIN_FEATURE_VIRIDIAN: case VIR_DOMAIN_FEATURE_PRIVNET: case VIR_DOMAIN_FEATURE_HYPERV: @@ -15321,6 +15320,7 @@ virDomainDefParseXML(xmlDocPtr xml, ctxt->node = node; break; + case VIR_DOMAIN_FEATURE_HAP: case VIR_DOMAIN_FEATURE_PMU: case VIR_DOMAIN_FEATURE_PVSPINLOCK: case VIR_DOMAIN_FEATURE_VMPORT: @@ -22043,7 +22043,6 @@ virDomainDefFormatInternal(virDomainDefPtr def, switch ((virDomainFeature) i) { case VIR_DOMAIN_FEATURE_ACPI: case VIR_DOMAIN_FEATURE_PAE: - case VIR_DOMAIN_FEATURE_HAP: case VIR_DOMAIN_FEATURE_VIRIDIAN: case VIR_DOMAIN_FEATURE_PRIVNET: switch ((virTristateSwitch) def->features[i]) { @@ -22065,6 +22064,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, break; + case VIR_DOMAIN_FEATURE_HAP: case VIR_DOMAIN_FEATURE_PMU: case VIR_DOMAIN_FEATURE_PVSPINLOCK: case VIR_DOMAIN_FEATURE_VMPORT: -- 2.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list