forked from pool/libvirt
Accepting request 796123 from home:jfehlig:branches:Virtualization
- libxl: Add support for 'passthrough' and 'e820_host' settings b7d6648d-conf-add-e820-host.patch, 5749395b-libxl-e820-host.patch, f3ef7daf-xenconfig-e820-host.patch, 34077c1b-tests-check-e820-host.patch, fadbaa23-conf-add-passthrough.patch, 9529e007-libxl-passthrough.patch, 9cb8bc6f-xenconfig-refactor-features.patch, b523e225-xenconfig-passthrough.patch, bed32525-tests-check-passthrough.patch bsc#1167217 OBS-URL: https://build.opensuse.org/request/show/796123 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=823
This commit is contained in:
parent
c93c63891d
commit
06eb24a4dd
@ -213,7 +213,7 @@ Index: libvirt-6.2.0/src/libvirt_private.syms
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libvirt_private.syms
|
--- libvirt-6.2.0.orig/src/libvirt_private.syms
|
||||||
+++ libvirt-6.2.0/src/libvirt_private.syms
|
+++ libvirt-6.2.0/src/libvirt_private.syms
|
||||||
@@ -725,6 +725,9 @@ virDomainConfNWFilterInstantiate;
|
@@ -727,6 +727,9 @@ virDomainConfNWFilterInstantiate;
|
||||||
virDomainConfNWFilterTeardown;
|
virDomainConfNWFilterTeardown;
|
||||||
virDomainConfVMNWFilterTeardown;
|
virDomainConfVMNWFilterTeardown;
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ Index: libvirt-6.2.0/src/libvirt_private.syms
|
|||||||
|
|
||||||
# conf/interface_conf.h
|
# conf/interface_conf.h
|
||||||
virInterfaceDefFormat;
|
virInterfaceDefFormat;
|
||||||
@@ -1751,6 +1754,7 @@ virCgroupGetMemoryUsage;
|
@@ -1753,6 +1756,7 @@ virCgroupGetMemoryUsage;
|
||||||
virCgroupGetMemSwapHardLimit;
|
virCgroupGetMemSwapHardLimit;
|
||||||
virCgroupGetMemSwapUsage;
|
virCgroupGetMemSwapUsage;
|
||||||
virCgroupGetPercpuStats;
|
virCgroupGetPercpuStats;
|
||||||
|
81
34077c1b-tests-check-e820-host.patch
Normal file
81
34077c1b-tests-check-e820-host.patch
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
commit 34077c1b8b62bb61e76b908d0959216da0b3185f
|
||||||
|
Author: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Date: Tue Apr 14 04:37:07 2020 +0200
|
||||||
|
|
||||||
|
tests: check e820_host option handling
|
||||||
|
|
||||||
|
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.cfg
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.cfg
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+name = "XenGuest1"
|
||||||
|
+uuid = "45b60f51-88a9-47a8-a3b3-5e66d71b2283"
|
||||||
|
+maxmem = 512
|
||||||
|
+memory = 512
|
||||||
|
+vcpus = 4
|
||||||
|
+e820_host = 1
|
||||||
|
+localtime = 0
|
||||||
|
+on_poweroff = "preserve"
|
||||||
|
+on_reboot = "restart"
|
||||||
|
+on_crash = "preserve"
|
||||||
|
+vif = [ "mac=5a:36:0e:be:00:09" ]
|
||||||
|
+bootloader = "/usr/bin/pygrub"
|
||||||
|
+disk = [ "format=qcow2,vdev=xvda,access=rw,backendtype=qdisk,target=/var/lib/xen/images/debian/disk.qcow2" ]
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.xml
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.xml
|
||||||
|
@@ -0,0 +1,37 @@
|
||||||
|
+<domain type='xen'>
|
||||||
|
+ <name>XenGuest1</name>
|
||||||
|
+ <uuid>45b60f51-88a9-47a8-a3b3-5e66d71b2283</uuid>
|
||||||
|
+ <memory unit='KiB'>524288</memory>
|
||||||
|
+ <currentMemory unit='KiB'>524288</currentMemory>
|
||||||
|
+ <vcpu placement='static'>4</vcpu>
|
||||||
|
+ <bootloader>/usr/bin/pygrub</bootloader>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch='x86_64' machine='xenpv'>linux</type>
|
||||||
|
+ </os>
|
||||||
|
+ <features>
|
||||||
|
+ <xen>
|
||||||
|
+ <e820_host state='on'/>
|
||||||
|
+ </xen>
|
||||||
|
+ </features>
|
||||||
|
+ <clock offset='utc' adjustment='reset'/>
|
||||||
|
+ <on_poweroff>preserve</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>preserve</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <disk type='file' device='disk'>
|
||||||
|
+ <driver name='qemu' type='qcow2'/>
|
||||||
|
+ <source file='/var/lib/xen/images/debian/disk.qcow2'/>
|
||||||
|
+ <target dev='xvda' bus='xen'/>
|
||||||
|
+ </disk>
|
||||||
|
+ <controller type='xenbus' index='0'/>
|
||||||
|
+ <interface type='ethernet'>
|
||||||
|
+ <mac address='5a:36:0e:be:00:09'/>
|
||||||
|
+ </interface>
|
||||||
|
+ <console type='pty'>
|
||||||
|
+ <target type='xen' port='0'/>
|
||||||
|
+ </console>
|
||||||
|
+ <input type='mouse' bus='xen'/>
|
||||||
|
+ <input type='keyboard' bus='xen'/>
|
||||||
|
+ <memballoon model='xen'/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigtest.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/tests/xlconfigtest.c
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigtest.c
|
||||||
|
@@ -300,6 +300,7 @@ mymain(void)
|
||||||
|
DO_TEST("vif-multi-ip");
|
||||||
|
DO_TEST("usb");
|
||||||
|
DO_TEST("usbctrl");
|
||||||
|
+ DO_TEST("paravirt-e820_host");
|
||||||
|
|
||||||
|
testXLFreeDriver(driver);
|
||||||
|
|
34
5749395b-libxl-e820-host.patch
Normal file
34
5749395b-libxl-e820-host.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
commit 5749395bfd03fcdb55a8be6a69637a2acaaad2c9
|
||||||
|
Author: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Date: Tue Apr 14 04:37:05 2020 +0200
|
||||||
|
|
||||||
|
libxl: make use of e820_host feature
|
||||||
|
|
||||||
|
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
|
@@ -692,6 +692,20 @@ libxlMakeDomBuildInfo(virDomainDefPtr de
|
||||||
|
b_info->u.pv.kernel = g_strdup(def->os.kernel);
|
||||||
|
}
|
||||||
|
b_info->u.pv.ramdisk = g_strdup(def->os.initrd);
|
||||||
|
+
|
||||||
|
+ if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ switch ((virTristateSwitch) def->xen_features[VIR_DOMAIN_XEN_E820_HOST]) {
|
||||||
|
+ case VIR_TRISTATE_SWITCH_ON:
|
||||||
|
+ libxl_defbool_set(&b_info->u.pv.e820_host, true);
|
||||||
|
+ break;
|
||||||
|
+ case VIR_TRISTATE_SWITCH_OFF:
|
||||||
|
+ libxl_defbool_set(&b_info->u.pv.e820_host, false);
|
||||||
|
+ break;
|
||||||
|
+ case VIR_TRISTATE_SWITCH_ABSENT:
|
||||||
|
+ case VIR_TRISTATE_SWITCH_LAST:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* only the 'xen' balloon device model is supported */
|
41
9529e007-libxl-passthrough.patch
Normal file
41
9529e007-libxl-passthrough.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
commit 9529e0077a3f9002d6bc7f5504ca4583e5d985f1
|
||||||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Wed Apr 15 17:18:25 2020 -0600
|
||||||
|
|
||||||
|
libxl: make use of passthrough hypervisor feature
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
|
@@ -158,6 +158,27 @@ libxlMakeDomCreateInfo(libxl_ctx *ctx,
|
||||||
|
c_info->type = LIBXL_DOMAIN_TYPE_PV;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef LIBXL_HAVE_CREATEINFO_PASSTHROUGH
|
||||||
|
+ if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ switch ((virTristateSwitch) def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH]) {
|
||||||
|
+ case VIR_TRISTATE_SWITCH_ON:
|
||||||
|
+ if (def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT)
|
||||||
|
+ c_info->passthrough = LIBXL_PASSTHROUGH_SYNC_PT;
|
||||||
|
+ else if (def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT)
|
||||||
|
+ c_info->passthrough = LIBXL_PASSTHROUGH_SHARE_PT;
|
||||||
|
+ else
|
||||||
|
+ c_info->passthrough = LIBXL_PASSTHROUGH_ENABLED;
|
||||||
|
+ break;
|
||||||
|
+ case VIR_TRISTATE_SWITCH_OFF:
|
||||||
|
+ c_info->passthrough = LIBXL_PASSTHROUGH_DISABLED;
|
||||||
|
+ break;
|
||||||
|
+ case VIR_TRISTATE_SWITCH_ABSENT:
|
||||||
|
+ case VIR_TRISTATE_SWITCH_LAST:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
c_info->name = g_strdup(def->name);
|
||||||
|
|
||||||
|
if (def->nseclabels &&
|
112
9cb8bc6f-xenconfig-refactor-features.patch
Normal file
112
9cb8bc6f-xenconfig-refactor-features.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
commit 9cb8bc6ff1ad80aba4d3c68756166a22e830d481
|
||||||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Wed Apr 15 21:48:42 2020 -0600
|
||||||
|
|
||||||
|
libxl: refactor cpu and hypervisor feature parser/formatter
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libxl/xen_common.c
|
||||||
|
+++ libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
@@ -493,15 +493,12 @@ xenParsePCIList(virConfPtr conf, virDoma
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
-xenParseCPUFeatures(virConfPtr conf,
|
||||||
|
- virDomainDefPtr def,
|
||||||
|
- virDomainXMLOptionPtr xmlopt)
|
||||||
|
+xenParseCPU(virConfPtr conf,
|
||||||
|
+ virDomainDefPtr def,
|
||||||
|
+ virDomainXMLOptionPtr xmlopt)
|
||||||
|
{
|
||||||
|
unsigned long count = 0;
|
||||||
|
g_autofree char *cpus = NULL;
|
||||||
|
- g_autofree char *tsc_mode = NULL;
|
||||||
|
- int val = 0;
|
||||||
|
- virDomainTimerDefPtr timer;
|
||||||
|
|
||||||
|
if (xenConfigGetULong(conf, "vcpus", &count, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
@@ -526,6 +523,17 @@ xenParseCPUFeatures(virConfPtr conf,
|
||||||
|
if (cpus && (virBitmapParse(cpus, &def->cpumask, 4096) < 0))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+xenParseHypervisorFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||||
|
+{
|
||||||
|
+ g_autofree char *tsc_mode = NULL;
|
||||||
|
+ virDomainTimerDefPtr timer;
|
||||||
|
+ int val = 0;
|
||||||
|
+
|
||||||
|
if (xenConfigGetString(conf, "tsc_mode", &tsc_mode, NULL) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
@@ -552,27 +560,26 @@ xenParseCPUFeatures(virConfPtr conf,
|
||||||
|
if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
|
||||||
|
if (xenConfigGetBool(conf, "pae", &val, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
else if (val)
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_PAE] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+
|
||||||
|
if (xenConfigGetBool(conf, "acpi", &val, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
else if (val)
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_ACPI] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+
|
||||||
|
if (xenConfigGetBool(conf, "apic", &val, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
else if (val)
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_APIC] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+
|
||||||
|
if (xenConfigGetBool(conf, "hap", &val, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
else if (!val)
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_HAP] = VIR_TRISTATE_SWITCH_OFF;
|
||||||
|
+
|
||||||
|
if (xenConfigGetBool(conf, "viridian", &val, 0) < 0)
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
else if (val)
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_VIRIDIAN] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
|
||||||
|
@@ -1483,7 +1490,10 @@ xenParseConfigCommon(virConfPtr conf,
|
||||||
|
if (xenParseEventsActions(conf, def) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- if (xenParseCPUFeatures(conf, def, xmlopt) < 0)
|
||||||
|
+ if (xenParseCPU(conf, def, xmlopt) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (xenParseHypervisorFeatures(conf, def) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (xenParseTimeOffset(conf, def) < 0)
|
||||||
|
@@ -2115,7 +2125,7 @@ xenFormatCPUAllocation(virConfPtr conf,
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
-xenFormatCPUFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||||
|
+xenFormatHypervisorFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
bool hvm = !!(def->os.type == VIR_DOMAIN_OSTYPE_HVM);
|
||||||
|
@@ -2423,7 +2433,7 @@ xenFormatConfigCommon(virConfPtr conf,
|
||||||
|
if (xenFormatCPUAllocation(conf, def) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- if (xenFormatCPUFeatures(conf, def) < 0)
|
||||||
|
+ if (xenFormatHypervisorFeatures(conf, def) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (xenFormatTimeOffset(conf, def) < 0)
|
112
b523e225-xenconfig-passthrough.patch
Normal file
112
b523e225-xenconfig-passthrough.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
commit b523e22521afe733165869c9e1ae18e88536acd6
|
||||||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Thu Apr 16 08:31:48 2020 -0600
|
||||||
|
|
||||||
|
xenconfig: Add support for 'passthrough' hypervisor feature
|
||||||
|
|
||||||
|
Add support for xl.cfg(5) 'passthrough' option in the domXML-to-xenconfig
|
||||||
|
configuration converter.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/src/libvirt_private.syms
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libvirt_private.syms
|
||||||
|
+++ libvirt-6.2.0/src/libvirt_private.syms
|
||||||
|
@@ -650,6 +650,8 @@ virDomainWatchdogActionTypeToString;
|
||||||
|
virDomainWatchdogDefFree;
|
||||||
|
virDomainWatchdogModelTypeFromString;
|
||||||
|
virDomainWatchdogModelTypeToString;
|
||||||
|
+virDomainXenPassthroughModeTypeFromString;
|
||||||
|
+virDomainXenPassthroughModeTypeToString;
|
||||||
|
virDomainXMLOptionGetNamespace;
|
||||||
|
virDomainXMLOptionGetSaveCookie;
|
||||||
|
virDomainXMLOptionNew;
|
||||||
|
Index: libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libxl/xen_common.c
|
||||||
|
+++ libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
@@ -530,14 +530,14 @@ xenParseCPU(virConfPtr conf,
|
||||||
|
static int
|
||||||
|
xenParseHypervisorFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||||
|
{
|
||||||
|
- g_autofree char *tsc_mode = NULL;
|
||||||
|
+ g_autofree char *strval = NULL;
|
||||||
|
virDomainTimerDefPtr timer;
|
||||||
|
int val = 0;
|
||||||
|
|
||||||
|
- if (xenConfigGetString(conf, "tsc_mode", &tsc_mode, NULL) < 0)
|
||||||
|
+ if (xenConfigGetString(conf, "tsc_mode", &strval, NULL) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- if (tsc_mode) {
|
||||||
|
+ if (strval) {
|
||||||
|
if (VIR_EXPAND_N(def->clock.timers, def->clock.ntimers, 1) < 0 ||
|
||||||
|
VIR_ALLOC(timer) < 0)
|
||||||
|
return -1;
|
||||||
|
@@ -547,16 +547,40 @@ xenParseHypervisorFeatures(virConfPtr co
|
||||||
|
timer->tickpolicy = -1;
|
||||||
|
timer->mode = VIR_DOMAIN_TIMER_MODE_AUTO;
|
||||||
|
timer->track = -1;
|
||||||
|
- if (STREQ_NULLABLE(tsc_mode, "always_emulate"))
|
||||||
|
+ if (STREQ_NULLABLE(strval, "always_emulate"))
|
||||||
|
timer->mode = VIR_DOMAIN_TIMER_MODE_EMULATE;
|
||||||
|
- else if (STREQ_NULLABLE(tsc_mode, "native"))
|
||||||
|
+ else if (STREQ_NULLABLE(strval, "native"))
|
||||||
|
timer->mode = VIR_DOMAIN_TIMER_MODE_NATIVE;
|
||||||
|
- else if (STREQ_NULLABLE(tsc_mode, "native_paravirt"))
|
||||||
|
+ else if (STREQ_NULLABLE(strval, "native_paravirt"))
|
||||||
|
timer->mode = VIR_DOMAIN_TIMER_MODE_PARAVIRT;
|
||||||
|
|
||||||
|
def->clock.timers[def->clock.ntimers - 1] = timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (xenConfigGetString(conf, "passthrough", &strval, NULL) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (strval) {
|
||||||
|
+ if (STREQ(strval, "disabled")) {
|
||||||
|
+ def->features[VIR_DOMAIN_FEATURE_XEN] = VIR_TRISTATE_SWITCH_OFF;
|
||||||
|
+ def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH] = VIR_TRISTATE_SWITCH_OFF;
|
||||||
|
+ } else if (STREQ(strval, "enabled")) {
|
||||||
|
+ def->features[VIR_DOMAIN_FEATURE_XEN] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ } else if (STREQ(strval, "sync_pt")) {
|
||||||
|
+ def->features[VIR_DOMAIN_FEATURE_XEN] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_passthrough_mode = VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT;
|
||||||
|
+ } else if (STREQ(strval, "share_pt")) {
|
||||||
|
+ def->features[VIR_DOMAIN_FEATURE_XEN] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_passthrough_mode = VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT;
|
||||||
|
+ } else {
|
||||||
|
+ virReportError(VIR_ERR_CONF_SYNTAX,
|
||||||
|
+ _("Invalid passthrough mode %s"), strval);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
|
||||||
|
if (xenConfigGetBool(conf, "pae", &val, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
@@ -2163,6 +2187,20 @@ xenFormatHypervisorFeatures(virConfPtr c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ if (def->xen_features[VIR_DOMAIN_XEN_PASSTHROUGH] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ if (def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT ||
|
||||||
|
+ def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT) {
|
||||||
|
+ if (xenConfigSetString(conf, "passthrough",
|
||||||
|
+ virDomainXenPassthroughModeTypeToString(def->xen_passthrough_mode)) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+ } else {
|
||||||
|
+ if (xenConfigSetString(conf, "passthrough", "enabled") < 0)
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
for (i = 0; i < def->clock.ntimers; i++) {
|
||||||
|
switch ((virDomainTimerNameType)def->clock.timers[i]->name) {
|
||||||
|
case VIR_DOMAIN_TIMER_NAME_TSC:
|
292
b7d6648d-conf-add-e820-host.patch
Normal file
292
b7d6648d-conf-add-e820-host.patch
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
commit b7d6648d436fe0a99d4faf0f99c88a27a7bfea33
|
||||||
|
Author: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Date: Tue Apr 14 04:37:04 2020 +0200
|
||||||
|
|
||||||
|
conf: add xen specific feature: e820_host
|
||||||
|
|
||||||
|
e820_host is a Xen-specific option, only available for PV domains, that
|
||||||
|
provides the domain a virtual e820 memory map based on the host one. It
|
||||||
|
is enabled with a new Xen hypervisor feature, e.g.
|
||||||
|
|
||||||
|
<features>
|
||||||
|
<xen>
|
||||||
|
<e820_host state='on'/>
|
||||||
|
</xen>
|
||||||
|
</features>
|
||||||
|
|
||||||
|
e820_host is required when using PCI passthrough and is generally
|
||||||
|
considered safe for any PV kernel. e820_host is silently ignored if set
|
||||||
|
in HVM domain configuration. See xl.cfg(5) man page in the Xen
|
||||||
|
documentation for more details.
|
||||||
|
|
||||||
|
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/docs/formatdomain.html.in
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/docs/formatdomain.html.in
|
||||||
|
+++ libvirt-6.2.0/docs/formatdomain.html.in
|
||||||
|
@@ -2055,6 +2055,9 @@
|
||||||
|
<hidden state='on'/>
|
||||||
|
<hint-dedicated state='on'/>
|
||||||
|
</kvm>
|
||||||
|
+ <xen>
|
||||||
|
+ <e820_host state='on'/>
|
||||||
|
+ </xen>
|
||||||
|
<pvspinlock state='on'/>
|
||||||
|
<gic version='2'/>
|
||||||
|
<ioapic driver='qemu'/>
|
||||||
|
@@ -2236,6 +2239,23 @@
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
+ <dt><code>xen</code></dt>
|
||||||
|
+ <dd>Various features to change the behavior of the Xen hypervisor.
|
||||||
|
+ <table class="top_table">
|
||||||
|
+ <tr>
|
||||||
|
+ <th>Feature</th>
|
||||||
|
+ <th>Description</th>
|
||||||
|
+ <th>Value</th>
|
||||||
|
+ <th>Since</th>
|
||||||
|
+ </tr>
|
||||||
|
+ <tr>
|
||||||
|
+ <td>e820_host</td>
|
||||||
|
+ <td>Expose the host e820 to the guest (PV only)</td>
|
||||||
|
+ <td>on, off</td>
|
||||||
|
+ <td><span class="since">6.3.0</span></td>
|
||||||
|
+ </tr>
|
||||||
|
+ </table>
|
||||||
|
+ </dd>
|
||||||
|
<dt><code>pmu</code></dt>
|
||||||
|
<dd>Depending on the <code>state</code> attribute (values <code>on</code>,
|
||||||
|
<code>off</code>, default <code>on</code>) enable or disable the
|
||||||
|
Index: libvirt-6.2.0/docs/schemas/domaincommon.rng
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/docs/schemas/domaincommon.rng
|
||||||
|
+++ libvirt-6.2.0/docs/schemas/domaincommon.rng
|
||||||
|
@@ -5334,6 +5334,9 @@
|
||||||
|
<ref name="kvm"/>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
+ <ref name="xen"/>
|
||||||
|
+ </optional>
|
||||||
|
+ <optional>
|
||||||
|
<element name="privnet">
|
||||||
|
<empty/>
|
||||||
|
</element>
|
||||||
|
@@ -6313,6 +6316,19 @@
|
||||||
|
<ref name="featurestate"/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
+ </interleave>
|
||||||
|
+ </element>
|
||||||
|
+ </define>
|
||||||
|
+
|
||||||
|
+ <!-- Optional Xen features -->
|
||||||
|
+ <define name="xen">
|
||||||
|
+ <element name="xen">
|
||||||
|
+ <interleave>
|
||||||
|
+ <optional>
|
||||||
|
+ <element name="e820_host">
|
||||||
|
+ <ref name="featurestate"/>
|
||||||
|
+ </element>
|
||||||
|
+ </optional>
|
||||||
|
</interleave>
|
||||||
|
</element>
|
||||||
|
</define>
|
||||||
|
Index: libvirt-6.2.0/src/conf/domain_conf.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/conf/domain_conf.c
|
||||||
|
+++ libvirt-6.2.0/src/conf/domain_conf.c
|
||||||
|
@@ -174,6 +174,7 @@ VIR_ENUM_IMPL(virDomainFeature,
|
||||||
|
"nested-hv",
|
||||||
|
"msrs",
|
||||||
|
"ccf-assist",
|
||||||
|
+ "xen",
|
||||||
|
);
|
||||||
|
|
||||||
|
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,
|
||||||
|
@@ -207,6 +208,11 @@ VIR_ENUM_IMPL(virDomainKVM,
|
||||||
|
"hint-dedicated",
|
||||||
|
);
|
||||||
|
|
||||||
|
+VIR_ENUM_IMPL(virDomainXen,
|
||||||
|
+ VIR_DOMAIN_XEN_LAST,
|
||||||
|
+ "e820_host"
|
||||||
|
+);
|
||||||
|
+
|
||||||
|
VIR_ENUM_IMPL(virDomainMsrsUnknown,
|
||||||
|
VIR_DOMAIN_MSRS_UNKNOWN_LAST,
|
||||||
|
"ignore",
|
||||||
|
@@ -20810,6 +20816,7 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||||
|
case VIR_DOMAIN_FEATURE_HYPERV:
|
||||||
|
case VIR_DOMAIN_FEATURE_KVM:
|
||||||
|
case VIR_DOMAIN_FEATURE_MSRS:
|
||||||
|
+ case VIR_DOMAIN_FEATURE_XEN:
|
||||||
|
def->features[val] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -21120,6 +21127,51 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||||
|
VIR_FREE(nodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ int feature;
|
||||||
|
+ int value;
|
||||||
|
+ if ((n = virXPathNodeSet("./features/xen/*", ctxt, &nodes)) < 0)
|
||||||
|
+ goto error;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < n; i++) {
|
||||||
|
+ feature = virDomainXenTypeFromString((const char *)nodes[i]->name);
|
||||||
|
+ if (feature < 0) {
|
||||||
|
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
+ _("unsupported Xen feature: %s"),
|
||||||
|
+ nodes[i]->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ switch ((virDomainXen) feature) {
|
||||||
|
+ case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
+ if (!(tmp = virXMLPropString(nodes[i], "state"))) {
|
||||||
|
+ virReportError(VIR_ERR_XML_ERROR,
|
||||||
|
+ _("missing 'state' attribute for "
|
||||||
|
+ "Xen feature '%s'"),
|
||||||
|
+ nodes[i]->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||||
|
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
+ _("invalid value of state argument "
|
||||||
|
+ "for Xen feature '%s'"),
|
||||||
|
+ nodes[i]->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ VIR_FREE(tmp);
|
||||||
|
+ def->xen_features[feature] = value;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ /* coverity[dead_error_begin] */
|
||||||
|
+ case VIR_DOMAIN_XEN_LAST:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ VIR_FREE(nodes);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (def->features[VIR_DOMAIN_FEATURE_SMM] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
int rv = virDomainParseScaledValue("string(./features/smm/tseg)",
|
||||||
|
"string(./features/smm/tseg/@unit)",
|
||||||
|
@@ -23113,6 +23165,7 @@ virDomainDefFeaturesCheckABIStability(vi
|
||||||
|
case VIR_DOMAIN_FEATURE_PRIVNET:
|
||||||
|
case VIR_DOMAIN_FEATURE_HYPERV:
|
||||||
|
case VIR_DOMAIN_FEATURE_KVM:
|
||||||
|
+ case VIR_DOMAIN_FEATURE_XEN:
|
||||||
|
case VIR_DOMAIN_FEATURE_PVSPINLOCK:
|
||||||
|
case VIR_DOMAIN_FEATURE_PMU:
|
||||||
|
case VIR_DOMAIN_FEATURE_VMPORT:
|
||||||
|
@@ -23284,6 +23337,30 @@ virDomainDefFeaturesCheckABIStability(vi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* xen */
|
||||||
|
+ if (src->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ for (i = 0; i < VIR_DOMAIN_XEN_LAST; i++) {
|
||||||
|
+ switch ((virDomainXen) i) {
|
||||||
|
+ case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
+ if (src->xen_features[i] != dst->xen_features[i]) {
|
||||||
|
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
+ _("State of Xen feature '%s' differs: "
|
||||||
|
+ "source: '%s', destination: '%s'"),
|
||||||
|
+ virDomainXenTypeToString(i),
|
||||||
|
+ virTristateSwitchTypeToString(src->xen_features[i]),
|
||||||
|
+ virTristateSwitchTypeToString(dst->xen_features[i]));
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ /* coverity[dead_error_begin] */
|
||||||
|
+ case VIR_DOMAIN_XEN_LAST:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* kvm */
|
||||||
|
if (src->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) {
|
||||||
|
@@ -28885,6 +28962,31 @@ virDomainDefFormatFeatures(virBufferPtr
|
||||||
|
virBufferAddLit(&childBuf, "</kvm>\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case VIR_DOMAIN_FEATURE_XEN:
|
||||||
|
+ if (def->features[i] != VIR_TRISTATE_SWITCH_ON)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ virBufferAddLit(&childBuf, "<xen>\n");
|
||||||
|
+ virBufferAdjustIndent(&childBuf, 2);
|
||||||
|
+ for (j = 0; j < VIR_DOMAIN_XEN_LAST; j++) {
|
||||||
|
+ switch ((virDomainXen) j) {
|
||||||
|
+ case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
+ if (def->xen_features[j])
|
||||||
|
+ virBufferAsprintf(&childBuf, "<%s state='%s'/>\n",
|
||||||
|
+ virDomainXenTypeToString(j),
|
||||||
|
+ virTristateSwitchTypeToString(
|
||||||
|
+ def->xen_features[j]));
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ /* coverity[dead_error_begin] */
|
||||||
|
+ case VIR_DOMAIN_XEN_LAST:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ virBufferAdjustIndent(&childBuf, -2);
|
||||||
|
+ virBufferAddLit(&childBuf, "</xen>\n");
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case VIR_DOMAIN_FEATURE_CAPABILITIES:
|
||||||
|
for (j = 0; j < VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST; j++) {
|
||||||
|
if (def->caps_features[j] != VIR_TRISTATE_SWITCH_ABSENT)
|
||||||
|
Index: libvirt-6.2.0/src/conf/domain_conf.h
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/conf/domain_conf.h
|
||||||
|
+++ libvirt-6.2.0/src/conf/domain_conf.h
|
||||||
|
@@ -1800,6 +1800,7 @@ typedef enum {
|
||||||
|
VIR_DOMAIN_FEATURE_NESTED_HV,
|
||||||
|
VIR_DOMAIN_FEATURE_MSRS,
|
||||||
|
VIR_DOMAIN_FEATURE_CCF_ASSIST,
|
||||||
|
+ VIR_DOMAIN_FEATURE_XEN,
|
||||||
|
|
||||||
|
VIR_DOMAIN_FEATURE_LAST
|
||||||
|
} virDomainFeature;
|
||||||
|
@@ -1846,6 +1847,12 @@ typedef enum {
|
||||||
|
} virDomainMsrsUnknown;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
+ VIR_DOMAIN_XEN_E820_HOST = 0,
|
||||||
|
+
|
||||||
|
+ VIR_DOMAIN_XEN_LAST
|
||||||
|
+} virDomainXen;
|
||||||
|
+
|
||||||
|
+typedef enum {
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_DEFAULT = 0,
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_ALLOW,
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_DENY,
|
||||||
|
@@ -2469,6 +2476,7 @@ struct _virDomainDef {
|
||||||
|
int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
|
||||||
|
int kvm_features[VIR_DOMAIN_KVM_LAST];
|
||||||
|
int msrs_features[VIR_DOMAIN_MSRS_LAST];
|
||||||
|
+ int xen_features[VIR_DOMAIN_XEN_LAST];
|
||||||
|
unsigned int hyperv_spinlocks;
|
||||||
|
int hyperv_stimer_direct;
|
||||||
|
virGICVersion gic_version;
|
||||||
|
@@ -3514,6 +3522,7 @@ VIR_ENUM_DECL(virDomainGraphicsSpiceMous
|
||||||
|
VIR_ENUM_DECL(virDomainGraphicsVNCSharePolicy);
|
||||||
|
VIR_ENUM_DECL(virDomainHyperv);
|
||||||
|
VIR_ENUM_DECL(virDomainKVM);
|
||||||
|
+VIR_ENUM_DECL(virDomainXen);
|
||||||
|
VIR_ENUM_DECL(virDomainMsrsUnknown);
|
||||||
|
VIR_ENUM_DECL(virDomainRNGModel);
|
||||||
|
VIR_ENUM_DECL(virDomainRNGBackend);
|
137
bed32525-tests-check-passthrough.patch
Normal file
137
bed32525-tests-check-passthrough.patch
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
commit bed325253681fa61537b01be821538479fa9df60
|
||||||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Fri Apr 17 14:19:16 2020 -0600
|
||||||
|
|
||||||
|
tests: check conversion of passthrough hypervisor feature
|
||||||
|
|
||||||
|
Add a new test to check the 'mode' attribute of the passthrough element
|
||||||
|
and augment an existing, related test to check enablement of the
|
||||||
|
passthrough element only.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-fullvirt-hypervisor-features.cfg
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-fullvirt-hypervisor-features.cfg
|
||||||
|
@@ -0,0 +1,26 @@
|
||||||
|
+name = "XenGuest2"
|
||||||
|
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
|
||||||
|
+maxmem = 579
|
||||||
|
+memory = 394
|
||||||
|
+vcpus = 1
|
||||||
|
+pae = 1
|
||||||
|
+acpi = 1
|
||||||
|
+apic = 1
|
||||||
|
+viridian = 0
|
||||||
|
+passthrough = "share_pt"
|
||||||
|
+rtc_timeoffset = 0
|
||||||
|
+localtime = 0
|
||||||
|
+on_poweroff = "destroy"
|
||||||
|
+on_reboot = "restart"
|
||||||
|
+on_crash = "restart"
|
||||||
|
+device_model = "/usr/lib/xen/bin/qemu-system-i386"
|
||||||
|
+sdl = 0
|
||||||
|
+vnc = 1
|
||||||
|
+vncunused = 1
|
||||||
|
+vnclisten = "127.0.0.1"
|
||||||
|
+vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000" ]
|
||||||
|
+parallel = "none"
|
||||||
|
+serial = "none"
|
||||||
|
+builder = "hvm"
|
||||||
|
+boot = "c"
|
||||||
|
+disk = [ "format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2" ]
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-fullvirt-hypervisor-features.xml
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-fullvirt-hypervisor-features.xml
|
||||||
|
@@ -0,0 +1,50 @@
|
||||||
|
+<domain type='xen'>
|
||||||
|
+ <name>XenGuest2</name>
|
||||||
|
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
+ <memory unit='KiB'>592896</memory>
|
||||||
|
+ <currentMemory unit='KiB'>403456</currentMemory>
|
||||||
|
+ <vcpu placement='static'>1</vcpu>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch='x86_64' machine='xenfv'>hvm</type>
|
||||||
|
+ <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
|
||||||
|
+ <boot dev='hd'/>
|
||||||
|
+ </os>
|
||||||
|
+ <features>
|
||||||
|
+ <acpi/>
|
||||||
|
+ <apic/>
|
||||||
|
+ <pae/>
|
||||||
|
+ <xen>
|
||||||
|
+ <passthrough state='on' mode='share_pt'/>
|
||||||
|
+ </xen>
|
||||||
|
+ </features>
|
||||||
|
+ <clock offset='variable' adjustment='0' basis='utc'/>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>restart</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
|
||||||
|
+ <disk type='block' device='disk'>
|
||||||
|
+ <driver name='phy' type='raw'/>
|
||||||
|
+ <source dev='/dev/HostVG/XenGuest2'/>
|
||||||
|
+ <target dev='hda' bus='ide'/>
|
||||||
|
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||||
|
+ </disk>
|
||||||
|
+ <controller type='xenbus' index='0'/>
|
||||||
|
+ <controller type='ide' index='0'/>
|
||||||
|
+ <interface type='bridge'>
|
||||||
|
+ <mac address='00:16:3e:66:92:9c'/>
|
||||||
|
+ <source bridge='xenbr1'/>
|
||||||
|
+ <script path='vif-bridge'/>
|
||||||
|
+ <model type='e1000'/>
|
||||||
|
+ </interface>
|
||||||
|
+ <input type='mouse' bus='ps2'/>
|
||||||
|
+ <input type='keyboard' bus='ps2'/>
|
||||||
|
+ <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
|
||||||
|
+ <listen type='address' address='127.0.0.1'/>
|
||||||
|
+ </graphics>
|
||||||
|
+ <video>
|
||||||
|
+ <model type='cirrus' vram='8192' heads='1' primary='yes'/>
|
||||||
|
+ </video>
|
||||||
|
+ <memballoon model='xen'/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.cfg
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/tests/xlconfigdata/test-paravirt-e820_host.cfg
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.cfg
|
||||||
|
@@ -4,6 +4,7 @@ maxmem = 512
|
||||||
|
memory = 512
|
||||||
|
vcpus = 4
|
||||||
|
e820_host = 1
|
||||||
|
+passthrough = "enabled"
|
||||||
|
localtime = 0
|
||||||
|
on_poweroff = "preserve"
|
||||||
|
on_reboot = "restart"
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.xml
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/tests/xlconfigdata/test-paravirt-e820_host.xml
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigdata/test-paravirt-e820_host.xml
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
<features>
|
||||||
|
<xen>
|
||||||
|
<e820_host state='on'/>
|
||||||
|
+ <passthrough state='on'/>
|
||||||
|
</xen>
|
||||||
|
</features>
|
||||||
|
<clock offset='utc' adjustment='reset'/>
|
||||||
|
Index: libvirt-6.2.0/tests/xlconfigtest.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/tests/xlconfigtest.c
|
||||||
|
+++ libvirt-6.2.0/tests/xlconfigtest.c
|
||||||
|
@@ -301,6 +301,9 @@ mymain(void)
|
||||||
|
DO_TEST("usb");
|
||||||
|
DO_TEST("usbctrl");
|
||||||
|
DO_TEST("paravirt-e820_host");
|
||||||
|
+#ifdef LIBXL_HAVE_CREATEINFO_PASSTHROUGH
|
||||||
|
+ DO_TEST("fullvirt-hypervisor-features");
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
testXLFreeDriver(driver);
|
||||||
|
|
40
f3ef7daf-xenconfig-e820-host.patch
Normal file
40
f3ef7daf-xenconfig-e820-host.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
commit f3ef7dafc8a60e6e21ac31cbbc019aa76a34e523
|
||||||
|
Author: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Date: Tue Apr 14 04:37:06 2020 +0200
|
||||||
|
|
||||||
|
xenconfig: parse e820_host option
|
||||||
|
|
||||||
|
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||||
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/libxl/xen_common.c
|
||||||
|
+++ libvirt-6.2.0/src/libxl/xen_common.c
|
||||||
|
@@ -592,6 +592,13 @@ xenParseCPUFeatures(virConfPtr conf,
|
||||||
|
|
||||||
|
def->clock.timers[def->clock.ntimers - 1] = timer;
|
||||||
|
}
|
||||||
|
+ } else {
|
||||||
|
+ if (xenConfigGetBool(conf, "e820_host", &val, 0) < 0) {
|
||||||
|
+ return -1;
|
||||||
|
+ } else if (val) {
|
||||||
|
+ def->features[VIR_DOMAIN_FEATURE_XEN] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ def->xen_features[VIR_DOMAIN_XEN_E820_HOST] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
@@ -2138,6 +2145,12 @@ xenFormatCPUFeatures(virConfPtr conf, vi
|
||||||
|
(def->features[VIR_DOMAIN_FEATURE_VIRIDIAN] ==
|
||||||
|
VIR_TRISTATE_SWITCH_ON) ? 1 : 0) < 0)
|
||||||
|
return -1;
|
||||||
|
+ } else {
|
||||||
|
+ if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ if (def->xen_features[VIR_DOMAIN_XEN_E820_HOST] == VIR_TRISTATE_SWITCH_ON)
|
||||||
|
+ if (xenConfigSetInt(conf, "e820_host", 1) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < def->clock.ntimers; i++) {
|
291
fadbaa23-conf-add-passthrough.patch
Normal file
291
fadbaa23-conf-add-passthrough.patch
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
commit fadbaa23757ff9dca329bdb8d3447c27599f6884
|
||||||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Wed Apr 15 16:34:54 2020 -0600
|
||||||
|
|
||||||
|
conf: add xen hypervisor feature 'passthrough'
|
||||||
|
|
||||||
|
'passthrough' is Xen-Specific guest configuration option new to Xen 4.13
|
||||||
|
that enables IOMMU mappings for a guest and hence whether it supports PCI
|
||||||
|
passthrough. The default is disabled. See the xl.cfg(5) man page and
|
||||||
|
xen.git commit babde47a3fe for more details.
|
||||||
|
|
||||||
|
The default state of disabled prevents hotlugging PCI devices. However,
|
||||||
|
if the guest configuration contains a PCI passthrough device at time of
|
||||||
|
creation, libxl will automatically enable 'passthrough' and subsequent
|
||||||
|
hotplugging of PCI devices will also be possible. It is not possible to
|
||||||
|
unconditionally enable 'passthrough' since it would introduce a migration
|
||||||
|
incompatibility due to guest ABI change. Instead, introduce another Xen
|
||||||
|
hypervisor feature that can be used to enable guest PCI passthrough
|
||||||
|
|
||||||
|
<features>
|
||||||
|
<xen>
|
||||||
|
<passthrough state='on'/>
|
||||||
|
</xen>
|
||||||
|
</features>
|
||||||
|
|
||||||
|
To allow finer control over how IOMMU maps to guest P2M table, the
|
||||||
|
passthrough element also supports a 'mode' attribute with values
|
||||||
|
restricted to snyc_pt and share_pt, similar to xl.cfg(5) 'passthrough'
|
||||||
|
setting .
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
|
||||||
|
Index: libvirt-6.2.0/docs/formatdomain.html.in
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/docs/formatdomain.html.in
|
||||||
|
+++ libvirt-6.2.0/docs/formatdomain.html.in
|
||||||
|
@@ -2057,6 +2057,7 @@
|
||||||
|
</kvm>
|
||||||
|
<xen>
|
||||||
|
<e820_host state='on'/>
|
||||||
|
+ <passthrough state='on' mode='share_pt'/>
|
||||||
|
</xen>
|
||||||
|
<pvspinlock state='on'/>
|
||||||
|
<gic version='2'/>
|
||||||
|
@@ -2254,6 +2255,12 @@
|
||||||
|
<td>on, off</td>
|
||||||
|
<td><span class="since">6.3.0</span></td>
|
||||||
|
</tr>
|
||||||
|
+ <tr>
|
||||||
|
+ <td>passthrough</td>
|
||||||
|
+ <td>Enable IOMMU mappings allowing PCI passthrough)</td>
|
||||||
|
+ <td>on, off; mode - optional string sync_pt or share_pt</td>
|
||||||
|
+ <td><span class="since">6.3.0</span></td>
|
||||||
|
+ </tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
<dt><code>pmu</code></dt>
|
||||||
|
Index: libvirt-6.2.0/docs/schemas/domaincommon.rng
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/docs/schemas/domaincommon.rng
|
||||||
|
+++ libvirt-6.2.0/docs/schemas/domaincommon.rng
|
||||||
|
@@ -6329,6 +6329,18 @@
|
||||||
|
<ref name="featurestate"/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
+ <optional>
|
||||||
|
+ <element name="passthrough">
|
||||||
|
+ <ref name="featurestate"/>
|
||||||
|
+ <optional>
|
||||||
|
+ <attribute name="mode">
|
||||||
|
+ <data type="string">
|
||||||
|
+ <param name='pattern'>(sync_pt|share_pt)</param>
|
||||||
|
+ </data>
|
||||||
|
+ </attribute>
|
||||||
|
+ </optional>
|
||||||
|
+ </element>
|
||||||
|
+ </optional>
|
||||||
|
</interleave>
|
||||||
|
</element>
|
||||||
|
</define>
|
||||||
|
Index: libvirt-6.2.0/src/conf/domain_conf.c
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/conf/domain_conf.c
|
||||||
|
+++ libvirt-6.2.0/src/conf/domain_conf.c
|
||||||
|
@@ -210,7 +210,15 @@ VIR_ENUM_IMPL(virDomainKVM,
|
||||||
|
|
||||||
|
VIR_ENUM_IMPL(virDomainXen,
|
||||||
|
VIR_DOMAIN_XEN_LAST,
|
||||||
|
- "e820_host"
|
||||||
|
+ "e820_host",
|
||||||
|
+ "passthrough",
|
||||||
|
+);
|
||||||
|
+
|
||||||
|
+VIR_ENUM_IMPL(virDomainXenPassthroughMode,
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH_MODE_LAST,
|
||||||
|
+ "default",
|
||||||
|
+ "sync_pt",
|
||||||
|
+ "share_pt",
|
||||||
|
);
|
||||||
|
|
||||||
|
VIR_ENUM_IMPL(virDomainMsrsUnknown,
|
||||||
|
@@ -21130,6 +21138,8 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||||
|
if (def->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
int feature;
|
||||||
|
int value;
|
||||||
|
+ g_autofree char *ptval = NULL;
|
||||||
|
+
|
||||||
|
if ((n = virXPathNodeSet("./features/xen/*", ctxt, &nodes)) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
@@ -21142,27 +21152,53 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!(tmp = virXMLPropString(nodes[i], "state"))) {
|
||||||
|
+ virReportError(VIR_ERR_XML_ERROR,
|
||||||
|
+ _("missing 'state' attribute for "
|
||||||
|
+ "Xen feature '%s'"),
|
||||||
|
+ nodes[i]->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||||
|
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
+ _("invalid value of state argument "
|
||||||
|
+ "for Xen feature '%s'"),
|
||||||
|
+ nodes[i]->name);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ VIR_FREE(tmp);
|
||||||
|
+ def->xen_features[feature] = value;
|
||||||
|
+
|
||||||
|
switch ((virDomainXen) feature) {
|
||||||
|
case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
- if (!(tmp = virXMLPropString(nodes[i], "state"))) {
|
||||||
|
- virReportError(VIR_ERR_XML_ERROR,
|
||||||
|
- _("missing 'state' attribute for "
|
||||||
|
- "Xen feature '%s'"),
|
||||||
|
- nodes[i]->name);
|
||||||
|
- goto error;
|
||||||
|
- }
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
- if ((value = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||||
|
+ case VIR_DOMAIN_XEN_PASSTHROUGH:
|
||||||
|
+ if (value != VIR_TRISTATE_SWITCH_ON)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ if ((ptval = virXMLPropString(nodes[i], "mode"))) {
|
||||||
|
+ int mode = virDomainXenPassthroughModeTypeFromString(ptval);
|
||||||
|
+
|
||||||
|
+ if (mode < 0) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
- _("invalid value of state argument "
|
||||||
|
- "for Xen feature '%s'"),
|
||||||
|
- nodes[i]->name);
|
||||||
|
+ _("unsupported mode '%s' for Xen passthrough feature"),
|
||||||
|
+ ptval);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
- VIR_FREE(tmp);
|
||||||
|
- def->xen_features[feature] = value;
|
||||||
|
- break;
|
||||||
|
+ if (mode != VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT &&
|
||||||
|
+ mode != VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT) {
|
||||||
|
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
|
+ _("'mode' attribute for Xen feature "
|
||||||
|
+ "'passthrough' must be 'sync_pt' or 'share_pt'"));
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+ def->xen_passthrough_mode = mode;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
/* coverity[dead_error_begin] */
|
||||||
|
case VIR_DOMAIN_XEN_LAST:
|
||||||
|
@@ -23340,18 +23376,28 @@ virDomainDefFeaturesCheckABIStability(vi
|
||||||
|
/* xen */
|
||||||
|
if (src->features[VIR_DOMAIN_FEATURE_XEN] == VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
for (i = 0; i < VIR_DOMAIN_XEN_LAST; i++) {
|
||||||
|
+ if (src->xen_features[i] != dst->xen_features[i]) {
|
||||||
|
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
+ _("State of Xen feature '%s' differs: "
|
||||||
|
+ "source: '%s', destination: '%s'"),
|
||||||
|
+ virDomainXenTypeToString(i),
|
||||||
|
+ virTristateSwitchTypeToString(src->xen_features[i]),
|
||||||
|
+ virTristateSwitchTypeToString(dst->xen_features[i]));
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
switch ((virDomainXen) i) {
|
||||||
|
case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
- if (src->xen_features[i] != dst->xen_features[i]) {
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VIR_DOMAIN_XEN_PASSTHROUGH:
|
||||||
|
+ if (src->xen_passthrough_mode != dst->xen_passthrough_mode) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
- _("State of Xen feature '%s' differs: "
|
||||||
|
+ _("'mode' of Xen passthrough feature differs: "
|
||||||
|
"source: '%s', destination: '%s'"),
|
||||||
|
- virDomainXenTypeToString(i),
|
||||||
|
- virTristateSwitchTypeToString(src->xen_features[i]),
|
||||||
|
- virTristateSwitchTypeToString(dst->xen_features[i]));
|
||||||
|
+ virDomainXenPassthroughModeTypeToString(src->xen_passthrough_mode),
|
||||||
|
+ virDomainXenPassthroughModeTypeToString(dst->xen_passthrough_mode));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* coverity[dead_error_begin] */
|
||||||
|
@@ -28969,13 +29015,30 @@ virDomainDefFormatFeatures(virBufferPtr
|
||||||
|
virBufferAddLit(&childBuf, "<xen>\n");
|
||||||
|
virBufferAdjustIndent(&childBuf, 2);
|
||||||
|
for (j = 0; j < VIR_DOMAIN_XEN_LAST; j++) {
|
||||||
|
+ if (def->xen_features[j] == VIR_TRISTATE_SWITCH_ABSENT)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ virBufferAsprintf(&childBuf, "<%s state='%s'",
|
||||||
|
+ virDomainXenTypeToString(j),
|
||||||
|
+ virTristateSwitchTypeToString(
|
||||||
|
+ def->xen_features[j]));
|
||||||
|
+
|
||||||
|
switch ((virDomainXen) j) {
|
||||||
|
case VIR_DOMAIN_XEN_E820_HOST:
|
||||||
|
- if (def->xen_features[j])
|
||||||
|
- virBufferAsprintf(&childBuf, "<%s state='%s'/>\n",
|
||||||
|
- virDomainXenTypeToString(j),
|
||||||
|
- virTristateSwitchTypeToString(
|
||||||
|
- def->xen_features[j]));
|
||||||
|
+ virBufferAddLit(&childBuf, "/>\n");
|
||||||
|
+ break;
|
||||||
|
+ case VIR_DOMAIN_XEN_PASSTHROUGH:
|
||||||
|
+ if (def->xen_features[j] != VIR_TRISTATE_SWITCH_ON) {
|
||||||
|
+ virBufferAddLit(&childBuf, "/>\n");
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if (def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT ||
|
||||||
|
+ def->xen_passthrough_mode == VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT) {
|
||||||
|
+ virBufferEscapeString(&childBuf, " mode='%s'/>\n",
|
||||||
|
+ virDomainXenPassthroughModeTypeToString(def->xen_passthrough_mode));
|
||||||
|
+ } else {
|
||||||
|
+ virBufferAddLit(&childBuf, "/>\n");
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* coverity[dead_error_begin] */
|
||||||
|
Index: libvirt-6.2.0/src/conf/domain_conf.h
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.2.0.orig/src/conf/domain_conf.h
|
||||||
|
+++ libvirt-6.2.0/src/conf/domain_conf.h
|
||||||
|
@@ -1848,11 +1848,20 @@ typedef enum {
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
VIR_DOMAIN_XEN_E820_HOST = 0,
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH,
|
||||||
|
|
||||||
|
VIR_DOMAIN_XEN_LAST
|
||||||
|
} virDomainXen;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH_MODE_DEFAULT = 0,
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT,
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT,
|
||||||
|
+
|
||||||
|
+ VIR_DOMAIN_XEN_PASSTHROUGH_MODE_LAST
|
||||||
|
+} virDomainXenPassthroughMode;
|
||||||
|
+
|
||||||
|
+typedef enum {
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_DEFAULT = 0,
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_ALLOW,
|
||||||
|
VIR_DOMAIN_CAPABILITIES_POLICY_DENY,
|
||||||
|
@@ -2477,6 +2486,7 @@ struct _virDomainDef {
|
||||||
|
int kvm_features[VIR_DOMAIN_KVM_LAST];
|
||||||
|
int msrs_features[VIR_DOMAIN_MSRS_LAST];
|
||||||
|
int xen_features[VIR_DOMAIN_XEN_LAST];
|
||||||
|
+ int xen_passthrough_mode;
|
||||||
|
unsigned int hyperv_spinlocks;
|
||||||
|
int hyperv_stimer_direct;
|
||||||
|
virGICVersion gic_version;
|
||||||
|
@@ -3523,6 +3533,7 @@ VIR_ENUM_DECL(virDomainGraphicsVNCShareP
|
||||||
|
VIR_ENUM_DECL(virDomainHyperv);
|
||||||
|
VIR_ENUM_DECL(virDomainKVM);
|
||||||
|
VIR_ENUM_DECL(virDomainXen);
|
||||||
|
+VIR_ENUM_DECL(virDomainXenPassthroughMode);
|
||||||
|
VIR_ENUM_DECL(virDomainMsrsUnknown);
|
||||||
|
VIR_ENUM_DECL(virDomainRNGModel);
|
||||||
|
VIR_ENUM_DECL(virDomainRNGBackend);
|
@ -1,3 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 21 17:45:36 UTC 2020 - James Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
- libxl: Add support for 'passthrough' and 'e820_host' settings
|
||||||
|
b7d6648d-conf-add-e820-host.patch,
|
||||||
|
5749395b-libxl-e820-host.patch,
|
||||||
|
f3ef7daf-xenconfig-e820-host.patch,
|
||||||
|
34077c1b-tests-check-e820-host.patch,
|
||||||
|
fadbaa23-conf-add-passthrough.patch,
|
||||||
|
9529e007-libxl-passthrough.patch,
|
||||||
|
9cb8bc6f-xenconfig-refactor-features.patch,
|
||||||
|
b523e225-xenconfig-passthrough.patch,
|
||||||
|
bed32525-tests-check-passthrough.patch
|
||||||
|
bsc#1167217
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Apr 17 05:19:57 UTC 2020 - Lin Ma <lma@suse.com>
|
Fri Apr 17 05:19:57 UTC 2020 - Lin Ma <lma@suse.com>
|
||||||
|
|
||||||
|
18
libvirt.spec
18
libvirt.spec
@ -343,6 +343,15 @@ Patch1: 8e669b38-conf-add-event-channels.patch
|
|||||||
Patch2: a93f55c5-libxl-add-event-channels.patch
|
Patch2: a93f55c5-libxl-add-event-channels.patch
|
||||||
Patch3: 967f4eeb-xenconfig-event-channels.patch
|
Patch3: 967f4eeb-xenconfig-event-channels.patch
|
||||||
Patch4: 93b15ba0-qemu-fix-hang-in-p2p-xbzrle-compression-parallel-mig.patch
|
Patch4: 93b15ba0-qemu-fix-hang-in-p2p-xbzrle-compression-parallel-mig.patch
|
||||||
|
Patch5: b7d6648d-conf-add-e820-host.patch
|
||||||
|
Patch6: 5749395b-libxl-e820-host.patch
|
||||||
|
Patch7: f3ef7daf-xenconfig-e820-host.patch
|
||||||
|
Patch8: 34077c1b-tests-check-e820-host.patch
|
||||||
|
Patch9: fadbaa23-conf-add-passthrough.patch
|
||||||
|
Patch10: 9529e007-libxl-passthrough.patch
|
||||||
|
Patch11: 9cb8bc6f-xenconfig-refactor-features.patch
|
||||||
|
Patch12: b523e225-xenconfig-passthrough.patch
|
||||||
|
Patch13: bed32525-tests-check-passthrough.patch
|
||||||
# Patches pending upstream review
|
# Patches pending upstream review
|
||||||
Patch100: libxl-dom-reset.patch
|
Patch100: libxl-dom-reset.patch
|
||||||
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch
|
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch
|
||||||
@ -883,6 +892,15 @@ libvirt plugin for NSS for translating domain names into IP addresses.
|
|||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
%patch150 -p1
|
%patch150 -p1
|
||||||
|
@ -7,7 +7,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
@@ -870,6 +870,30 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
@@ -905,6 +905,30 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
static char *
|
static char *
|
||||||
libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src,
|
libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src,
|
||||||
const char *username,
|
const char *username,
|
||||||
@@ -1111,6 +1135,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
@@ -1146,6 +1170,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
||||||
x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0;
|
x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0;
|
||||||
if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0)
|
if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -11,7 +11,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
@@ -870,6 +870,22 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
@@ -905,6 +905,22 @@ libxlDiskSetDiscard(libxl_device_disk *x
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
static void
|
static void
|
||||||
libxlDiskSetCacheMode(libxl_device_disk *x_disk, int cachemode)
|
libxlDiskSetCacheMode(libxl_device_disk *x_disk, int cachemode)
|
||||||
{
|
{
|
||||||
@@ -1010,6 +1026,7 @@ libxlMakeNetworkDiskSrc(virStorageSource
|
@@ -1045,6 +1061,7 @@ libxlMakeNetworkDiskSrc(virStorageSource
|
||||||
int
|
int
|
||||||
libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
|
||||||
{
|
{
|
||||||
@ -42,7 +42,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
const char *driver = virDomainDiskGetDriver(l_disk);
|
const char *driver = virDomainDiskGetDriver(l_disk);
|
||||||
int format = virDomainDiskGetFormat(l_disk);
|
int format = virDomainDiskGetFormat(l_disk);
|
||||||
int actual_type = virStorageSourceGetActualType(l_disk->src);
|
int actual_type = virStorageSourceGetActualType(l_disk->src);
|
||||||
@@ -1025,7 +1042,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
@@ -1060,7 +1077,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
||||||
if (libxlMakeNetworkDiskSrc(l_disk->src, &x_disk->pdev_path) < 0)
|
if (libxlMakeNetworkDiskSrc(l_disk->src, &x_disk->pdev_path) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
@ -51,7 +51,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
x_disk->vdev = g_strdup(l_disk->dst);
|
x_disk->vdev = g_strdup(l_disk->dst);
|
||||||
@@ -1136,6 +1153,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
@@ -1171,6 +1188,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk
|
||||||
if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0)
|
if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
libxlDiskSetCacheMode(x_disk, l_disk->cachemode);
|
libxlDiskSetCacheMode(x_disk, l_disk->cachemode);
|
||||||
|
@ -31,7 +31,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
@@ -1788,7 +1788,7 @@ libxlDriverConfigNew(void)
|
@@ -1823,7 +1823,7 @@ libxlDriverConfigNew(void)
|
||||||
int
|
int
|
||||||
libxlDriverConfigInit(libxlDriverConfigPtr cfg)
|
libxlDriverConfigInit(libxlDriverConfigPtr cfg)
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
@@ -1702,15 +1702,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRa
|
@@ -1737,15 +1737,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRa
|
||||||
/*
|
/*
|
||||||
* Get domain0 autoballoon configuration. Honor user-specified
|
* Get domain0 autoballoon configuration. Honor user-specified
|
||||||
* setting in libxl.conf first. If not specified, autoballooning
|
* setting in libxl.conf first. If not specified, autoballooning
|
||||||
@ -48,7 +48,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = virConfGetValueBool(conf, "autoballoon", &cfg->autoballoon);
|
res = virConfGetValueBool(conf, "autoballoon", &cfg->autoballoon);
|
||||||
@@ -1719,15 +1716,8 @@ libxlGetAutoballoonConf(libxlDriverConfi
|
@@ -1754,15 +1751,8 @@ libxlGetAutoballoonConf(libxlDriverConfi
|
||||||
else if (res == 1)
|
else if (res == 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Index: libvirt-6.2.0/src/libxl/libxl_conf.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
--- libvirt-6.2.0.orig/src/libxl/libxl_conf.c
|
||||||
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
+++ libvirt-6.2.0/src/libxl/libxl_conf.c
|
||||||
@@ -1742,6 +1742,15 @@ libxlDriverConfigNew(void)
|
@@ -1777,6 +1777,15 @@ libxlDriverConfigNew(void)
|
||||||
cfg->autoDumpDir = g_strdup(LIBXL_DUMP_DIR);
|
cfg->autoDumpDir = g_strdup(LIBXL_DUMP_DIR);
|
||||||
cfg->channelDir = g_strdup(LIBXL_CHANNEL_DIR);
|
cfg->channelDir = g_strdup(LIBXL_CHANNEL_DIR);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user