libvirt/fix-pci-attach-xen-driver.patch
James Fehlig e5c6318b4d Accepting request 235993 from home:jfehlig:branches:Virtualization
- Update to libvirt 1.2.5
  - Introduce virDomain{Get,Set}Time APIs
  - Introduce virDomainFSFreeze() and virDomainFSThaw() public API
  - Many incremental improvements and bug fixes, see
    http://libvirt.org/news.html
  - Drop upstream patches:
    b98bf811-add-paravirt-shutdown-flag.patch,
    c4fe29f8-use-shutdown-flag.patch,
    da744120-use-reboot-flag.patch,
    d6b27d3e-CVE-2014-0179.patch,
    fd43d1f8-libxl-iface-hostdev.patch,
    99f50208-managed-hostdev-iface.patch,
    292d3f2d-libselinux-build-fix1.patch,
    b109c097-libselinux-build-fix2.patch

OBS-URL: https://build.opensuse.org/request/show/235993
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=381
2014-06-02 04:12:51 +00:00

43 lines
1.7 KiB
Diff

Fix PCI device attach in xend driver
When attaching PCI device using the xend driver, the 'device_create'
RPC is called, which is not sufficient to fully prepare/configure
the device for attachment to a domain. In the xen tools, xm pci-attach
uses the 'device_configure' RPC.
This patch changes the xend driver to always call 'device_configure' for
PCI devices to be consistent with the usage in the xen tools.
Index: libvirt-1.2.5/src/xen/xend_internal.c
===================================================================
--- libvirt-1.2.5.orig/src/xen/xend_internal.c
+++ libvirt-1.2.5/src/xen/xend_internal.c
@@ -2219,6 +2219,7 @@ xenDaemonAttachDeviceFlags(virConnectPtr
virBuffer buf = VIR_BUFFER_INITIALIZER;
char class[8], ref[80];
char *target = NULL;
+ int new_dev;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -2317,8 +2318,18 @@ xenDaemonAttachDeviceFlags(virConnectPtr
}
sexpr = virBufferContentAndReset(&buf);
+ new_dev = virDomainXMLDevID(conn, minidef, dev, class, ref, sizeof(ref));
- if (virDomainXMLDevID(conn, minidef, dev, class, ref, sizeof(ref))) {
+ /* always call 'device_configure' for pci device */
+ if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
+ dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
+ dev->data.hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) {
+ ret = xend_op(conn, def->name, "op", "device_configure",
+ "config", sexpr, "dev", ref, NULL);
+ goto cleanup;
+ }
+
+ if (new_dev) {
/* device doesn't exist, define it */
ret = xend_op(conn, def->name, "op", "device_create",
"config", sexpr, NULL);