Add VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN. For legacy xen, it will use "pciback"
as
stub driver.
Signed-off-by: Chunyan Liu <cyliu(a)suse.com>
---
docs/schemas/domaincommon.rng | 1 +
src/conf/domain_conf.c | 3 ++-
src/conf/domain_conf.h | 1 +
src/libxl/libxl_domain.c | 9 +++++++++
src/qemu/qemu_command.c | 3 +--
src/qemu/qemu_hotplug.c | 4 +---
src/util/virhostdev.c | 12 ++++++++++++
7 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 7f55f24..9f5c47d 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3376,6 +3376,7 @@
<choice>
<value>kvm</value>
<value>vfio</value>
+ <value>xen</value>
</choice>
</attribute>
<empty/>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 28e24f9..69b10c9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -623,7 +623,8 @@ VIR_ENUM_IMPL(virDomainHostdevSubsysPciBackend,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST,
"default",
"kvm",
- "vfio")
+ "vfio",
+ "xen")
VIR_ENUM_IMPL(virDomainHostdevCaps, VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST,
"storage",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index d8f2e49..7a00cad 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -414,6 +414,7 @@ typedef enum {
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, /* detect automaticaly, prefer VFIO */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM, /* force legacy kvm style */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO, /* force vfio */
+ VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN, /* force legacy xen style, use pciback */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST
} virDomainHostdevSubsysPciBackendType;
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index e72c483..36dd2f5 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -392,6 +392,15 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
STRNEQ(def->os.type, "hvm"))
dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
+ if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+ virDomainHostdevDefPtr hostdev = dev->data.hostdev;
+
+ if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
+ hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI
&&
+ hostdev->source.subsys.u.pci.backend ==
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT)
+ hostdev->source.subsys.u.pci.backend =
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN;
+ }
+
return 0;
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index c6d075f..3809a1c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5537,8 +5537,7 @@ qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
virBufferAddLit(&buf, "vfio-pci");
break;
- case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
- case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST:
+ default:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid PCI passthrough type '%s'"),
virDomainHostdevSubsysPciBackendTypeToString(backend));
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index badf7c7..8a69727 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1194,9 +1194,7 @@ qemuDomainAttachHostPciDevice(virQEMUDriverPtr driver,
virProcessSetMaxMemLock(vm->pid, memKB * 1024);
break;
- case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
- case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM:
- case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST:
+ default:
break;
}
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
index fa178e2..85d9e8d 100644
--- a/src/util/virhostdev.c
+++ b/src/util/virhostdev.c
@@ -373,6 +373,13 @@ virHostdevGetPciHostDeviceList(virDomainHostdevDefPtr *hostdevs, int
nhostdevs)
}
break;
+ case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN :
+ if (virPCIDeviceSetStubDriver(dev, "pciback") < 0) {
+ virObjectUnref(list);
+ return NULL;
+ }
+ break;
+
case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM :
case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0) {
@@ -1192,6 +1199,11 @@ virHostdevUpdateActivePciHostdevs(virHostdevManagerPtr mgr,
goto cleanup;
break;
+ case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN :
+ if (virPCIDeviceSetStubDriver(dev, "pciback") < 0)
+ goto cleanup;
+ break;
+
case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM :
case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0)
--
1.6.0.2