forked from pool/libvirt
Add HAP support to libvirt domain XML
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=90
This commit is contained in:
parent
6551d822aa
commit
b62b15355b
89
04197350-hap2.patch
Normal file
89
04197350-hap2.patch
Normal file
@ -0,0 +1,89 @@
|
||||
commit 041973504f715bcff7de3b17cd258617244b79c4
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Wed Jan 5 15:16:57 2011 -0700
|
||||
|
||||
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.
|
||||
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index 6ce0c3f..d3633ee 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -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)");
|
||||
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index 4d6b41b..ec618aa 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -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) {
|
||||
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
|
||||
index 6fff276..fffa617 100644
|
||||
--- a/src/xenapi/xenapi_driver.c
|
||||
+++ b/src/xenapi/xenapi_driver.c
|
||||
@@ -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);
|
||||
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
|
||||
index a7e2a4b..2ec5f9e 100644
|
||||
--- a/src/xenapi/xenapi_utils.c
|
||||
+++ b/src/xenapi/xenapi_utils.c
|
||||
@@ -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;
|
32
094c6f4a-hap-fix.patch
Normal file
32
094c6f4a-hap-fix.patch
Normal file
@ -0,0 +1,32 @@
|
||||
commit 094c6f4a24165d2d07f64bbd70243b3306a34d5b
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Fri Jan 14 11:12:46 2011 -0700
|
||||
|
||||
Fix 'make check' after commit 04197350
|
||||
|
||||
I broke 'make check' with commit 04197350 by unconditionally
|
||||
emitting 'hap=' in xen xm driver. Only emit 'hap=' if
|
||||
xendConfigVersion >= 3. I've tested sending 'hap=' to a Xen 3.2
|
||||
machine without support for hap setting and verified that xend
|
||||
silently drops the unrecognized setting.
|
||||
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index ec618aa..bfb6698 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -2413,10 +2413,11 @@ 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 (priv->xendConfigVersion >= 3)
|
||||
+ 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) {
|
41
48a5dccd-hap1.patch
Normal file
41
48a5dccd-hap1.patch
Normal file
@ -0,0 +1,41 @@
|
||||
commit 48a5dccda905b5c6e8a02a37c093c42a9ef4e350
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Wed Jan 5 14:56:48 2011 -0700
|
||||
|
||||
Add HAP to virDomainFeature enum
|
||||
|
||||
Extend the virDomainFeature enumeration to include HAP (hardware
|
||||
assisted paging) feature.
|
||||
|
||||
Hardware features such as Extended Page Table and Nested Page
|
||||
Table augment hypervisor software techniques such as shadow
|
||||
page table. Adding HAP to the virDomainFeature enumeration
|
||||
allows users to select between hardware and software memory
|
||||
management mechanisms for their guests.
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index b4df38c..2c54683 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -75,7 +75,8 @@ VIR_ENUM_IMPL(virDomainBoot, VIR_DOMAIN_BOOT_LAST,
|
||||
VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST,
|
||||
"acpi",
|
||||
"apic",
|
||||
- "pae")
|
||||
+ "pae",
|
||||
+ "hap")
|
||||
|
||||
VIR_ENUM_IMPL(virDomainLifecycle, VIR_DOMAIN_LIFECYCLE_LAST,
|
||||
"destroy",
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index a459a22..6a8ec64 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -730,6 +730,7 @@ enum virDomainFeature {
|
||||
VIR_DOMAIN_FEATURE_ACPI,
|
||||
VIR_DOMAIN_FEATURE_APIC,
|
||||
VIR_DOMAIN_FEATURE_PAE,
|
||||
+ VIR_DOMAIN_FEATURE_HAP,
|
||||
|
||||
VIR_DOMAIN_FEATURE_LAST
|
||||
};
|
56
79f56c66-hap4.patch
Normal file
56
79f56c66-hap4.patch
Normal file
@ -0,0 +1,56 @@
|
||||
commit 79f56c669f0f4d554cec3137d0a6aadf7c5f2bec
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Wed Jan 5 16:07:54 2011 -0700
|
||||
|
||||
Document HAP domain feature
|
||||
|
||||
Add HAP feature to schema and documentation.
|
||||
|
||||
Index: libvirt-0.8.7/docs/formatdomain.html.in
|
||||
===================================================================
|
||||
--- libvirt-0.8.7.orig/docs/formatdomain.html.in
|
||||
+++ libvirt-0.8.7/docs/formatdomain.html.in
|
||||
@@ -437,6 +437,7 @@
|
||||
<pae/>
|
||||
<acpi/>
|
||||
<apic/>
|
||||
+ <hap/>
|
||||
</features>
|
||||
...</pre>
|
||||
|
||||
@@ -456,6 +457,10 @@
|
||||
<dd>ACPI is useful for power management, for example, with
|
||||
KVM guests it is required for graceful shutdown to work.
|
||||
</dd>
|
||||
+ <dt><code>hap</code></dt>
|
||||
+ <dd>Enable use of Hardware Assisted Paging if available in
|
||||
+ the hardware.
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<h3><a name="elementsTime">Time keeping</a></h3>
|
||||
Index: libvirt-0.8.7/docs/schemas/domain.rng
|
||||
===================================================================
|
||||
--- libvirt-0.8.7.orig/docs/schemas/domain.rng
|
||||
+++ libvirt-0.8.7/docs/schemas/domain.rng
|
||||
@@ -1741,7 +1741,7 @@
|
||||
</element>
|
||||
</define>
|
||||
<!--
|
||||
- A set of optional features: PAE, APIC and ACPI support
|
||||
+ A set of optional features: PAE, APIC, ACPI, and HAP support
|
||||
-->
|
||||
<define name="features">
|
||||
<optional>
|
||||
@@ -1762,6 +1762,11 @@
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name="hap">
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
36
af521a01-hap3.patch
Normal file
36
af521a01-hap3.patch
Normal file
@ -0,0 +1,36 @@
|
||||
commit af521a0182a0d6867796c65b1b0cd83fb14032a9
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Wed Jan 5 15:20:01 2011 -0700
|
||||
|
||||
Add HAP to xen hypervisor capabilities
|
||||
|
||||
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.
|
||||
|
||||
Xen does not provide a mechanism to discover the HAP capability, so
|
||||
we advertise its availability for hvm guests on Xen >= 3.3.
|
||||
|
||||
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
|
||||
index ead8ee9..229ef3d 100644
|
||||
--- a/src/xen/xen_hypervisor.c
|
||||
+++ b/src/xen/xen_hypervisor.c
|
||||
@@ -2321,6 +2321,16 @@ xenHypervisorBuildCapabilities(virConnectPtr conn,
|
||||
hv_minor > 0 ?
|
||||
0 : 1)) == NULL)
|
||||
goto no_memory;
|
||||
+
|
||||
+ /* Xen 3.3.x and beyond supports enabling/disabling
|
||||
+ * hardware assisted paging. Default is off.
|
||||
+ */
|
||||
+ if ((hv_major == 3 && hv_minor >= 3) || (hv_major > 3))
|
||||
+ if (virCapabilitiesAddGuestFeature(guest,
|
||||
+ "hap",
|
||||
+ 0,
|
||||
+ 1) == NULL)
|
||||
+ goto no_memory;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,15 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 18 14:57:18 MST 2011 - jfehlig@novell.com
|
||||
|
||||
- Add support for specifying Hardware Assisted Paging (HAP) in
|
||||
libvirt domain XML.
|
||||
48a5dccd-hap1.patch
|
||||
04197350-hap2.patch
|
||||
af521a01-hap3.patch
|
||||
79f56c66-hap4.patch
|
||||
094c6f4a-hap-fix.patch
|
||||
bnc#659665
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 18 09:25:18 MST 2011 - jfehlig@novell.com
|
||||
|
||||
|
10
libvirt.spec
10
libvirt.spec
@ -173,6 +173,11 @@ Source0: %{name}-%{version}.tar.bz2
|
||||
Source1: libvirtd.init
|
||||
# Upstream patches
|
||||
Patch0: a43c7338-dnsmasq-hostfile-fix.patch
|
||||
Patch1: 48a5dccd-hap1.patch
|
||||
Patch2: 04197350-hap2.patch
|
||||
Patch3: af521a01-hap3.patch
|
||||
Patch4: 79f56c66-hap4.patch
|
||||
Patch5: 094c6f4a-hap-fix.patch
|
||||
# Need to go upstream
|
||||
Patch100: xen-name-for-devid.patch
|
||||
Patch102: clone.patch
|
||||
@ -286,6 +291,11 @@ Authors:
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch100 -p1
|
||||
%patch102
|
||||
%patch103 -p1
|
||||
|
@ -13,10 +13,10 @@ Date: Wed Jan 27 16:11:41 2010 -0700
|
||||
This approach allows removing a disk when domain is inactive. We
|
||||
obviously can't search xenstore when the domain is inactive.
|
||||
|
||||
Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
Index: libvirt-0.8.7/src/xen/xend_internal.c
|
||||
===================================================================
|
||||
--- libvirt-0.8.6.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-0.8.6/src/xen/xend_internal.c
|
||||
--- libvirt-0.8.7.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-0.8.7/src/xen/xend_internal.c
|
||||
@@ -89,6 +89,7 @@ xenDaemonFormatSxprOnePCI(virDomainHostd
|
||||
|
||||
static int
|
||||
@ -25,7 +25,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
virDomainDeviceDefPtr dev,
|
||||
char *class,
|
||||
char *ref,
|
||||
@@ -4052,7 +4053,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
@@ -4054,7 +4055,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
@ -34,7 +34,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
/* device doesn't exist, define it */
|
||||
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
||||
"config", sexpr, NULL);
|
||||
@@ -4170,7 +4171,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||
@@ -4172,7 +4173,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
@ -43,7 +43,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("requested device does not exist"));
|
||||
goto cleanup;
|
||||
@@ -4263,7 +4264,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||
@@ -4265,7 +4266,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||
def, xml, VIR_DOMAIN_XML_INACTIVE)))
|
||||
goto cleanup;
|
||||
|
||||
@ -52,7 +52,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
goto cleanup;
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
@@ -6033,6 +6034,7 @@ error:
|
||||
@@ -6037,6 +6038,7 @@ error:
|
||||
*/
|
||||
static int
|
||||
virDomainXMLDevID(virDomainPtr domain,
|
||||
@ -60,7 +60,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
virDomainDeviceDefPtr dev,
|
||||
char *class,
|
||||
char *ref,
|
||||
@@ -6041,8 +6043,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -6045,8 +6047,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||
char *xref;
|
||||
char *tmp;
|
||||
@ -73,7 +73,7 @@ Index: libvirt-0.8.6/src/xen/xend_internal.c
|
||||
if (dev->data.disk->driverName &&
|
||||
STREQ(dev->data.disk->driverName, "tap"))
|
||||
strcpy(class, "tap");
|
||||
@@ -6052,19 +6058,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -6056,19 +6062,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
else
|
||||
strcpy(class, "vbd");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user