diff --git a/0e0c1a74-domid-fix.patch b/0e0c1a74-domid-fix.patch deleted file mode 100644 index c083892..0000000 --- a/0e0c1a74-domid-fix.patch +++ /dev/null @@ -1,272 +0,0 @@ -commit 0e0c1a7489a6a04c5060d0fe7fad6337ed98ec01 -Author: Stefan Bader -Date: Thu Mar 27 17:55:02 2014 +0100 - - libxl: Use id from virDomainObj inside the driver - - There is a domain id in the virDomain structure as well as in the - virDomainObj structure. While the former can become stale the latter - is kept up to date. So it is safer to always (virDomainObjPtr)->def->id - internally. - - This will fix issues seen when managing Xen guests through libvirt from - virt-manager (not being able to get domain info after define or reboot). - This was caused both though libxlDomainGetInfo() only but there were - a lot of places that might potentially cause issues, too. - - Signed-off-by: Stefan Bader - -Index: libvirt-1.2.3/src/libxl/libxl_driver.c -=================================================================== ---- libvirt-1.2.3.orig/src/libxl/libxl_driver.c -+++ libvirt-1.2.3/src/libxl/libxl_driver.c -@@ -770,10 +770,10 @@ libxlDomainSuspend(virDomainPtr dom) - priv = vm->privateData; - - if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) { -- if (libxl_domain_pause(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_pause(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to suspend domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - goto endjob; - } - -@@ -829,10 +829,10 @@ libxlDomainResume(virDomainPtr dom) - priv = vm->privateData; - - if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) { -- if (libxl_domain_unpause(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_unpause(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to resume domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - goto endjob; - } - -@@ -883,10 +883,10 @@ libxlDomainShutdownFlags(virDomainPtr do - } - - priv = vm->privateData; -- if (libxl_domain_shutdown(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_shutdown(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to shutdown domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - goto cleanup; - } - -@@ -930,10 +930,10 @@ libxlDomainReboot(virDomainPtr dom, unsi - } - - priv = vm->privateData; -- if (libxl_domain_reboot(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_reboot(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to reboot domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - goto cleanup; - } - ret = 0; -@@ -974,7 +974,7 @@ libxlDomainDestroyFlags(virDomainPtr dom - priv = vm->privateData; - if (libxl_domain_destroy(priv->ctx, vm->def->id, NULL) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Failed to destroy domain '%d'"), dom->id); -+ _("Failed to destroy domain '%d'"), vm->def->id); - goto cleanup; - } - -@@ -1105,10 +1105,10 @@ libxlDomainSetMemoryFlags(virDomainPtr d - - if (flags & VIR_DOMAIN_MEM_LIVE) { - priv = vm->privateData; -- if (libxl_domain_setmaxmem(priv->ctx, dom->id, newmem) < 0) { -+ if (libxl_domain_setmaxmem(priv->ctx, vm->def->id, newmem) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to set maximum memory for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - } -@@ -1138,13 +1138,13 @@ libxlDomainSetMemoryFlags(virDomainPtr d - priv = vm->privateData; - /* Unlock virDomainObj while ballooning memory */ - virObjectUnlock(vm); -- res = libxl_set_memory_target(priv->ctx, dom->id, newmem, 0, -+ res = libxl_set_memory_target(priv->ctx, vm->def->id, newmem, 0, - /* force */ 1); - virObjectLock(vm); - if (res < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to set memory for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - } -@@ -1202,9 +1202,10 @@ libxlDomainGetInfo(virDomainPtr dom, vir - info->memory = vm->def->mem.cur_balloon; - info->maxMem = vm->def->mem.max_balloon; - } else { -- if (libxl_domain_info(priv->ctx, &d_info, dom->id) != 0) { -+ if (libxl_domain_info(priv->ctx, &d_info, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("libxl_domain_info failed for domain '%d'"), dom->id); -+ _("libxl_domain_info failed for domain '%d'"), -+ vm->def->id); - goto cleanup; - } - info->cpuTime = d_info.cpu_time; -@@ -1483,11 +1484,11 @@ libxlDomainCoreDump(virDomainPtr dom, co - - if (!(flags & VIR_DUMP_LIVE) && - virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) { -- if (libxl_domain_pause(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_pause(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Before dumping core, failed to suspend domain '%d'" - " with libxenlight"), -- dom->id); -+ vm->def->id); - goto endjob; - } - virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_DUMP); -@@ -1496,20 +1497,20 @@ libxlDomainCoreDump(virDomainPtr dom, co - - /* Unlock virDomainObj while dumping core */ - virObjectUnlock(vm); -- ret = libxl_domain_core_dump(priv->ctx, dom->id, to, NULL); -+ ret = libxl_domain_core_dump(priv->ctx, vm->def->id, to, NULL); - virObjectLock(vm); - if (ret != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to dump core of domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - ret = -1; - goto unpause; - } - - if (flags & VIR_DUMP_CRASH) { -- if (libxl_domain_destroy(priv->ctx, dom->id, NULL) < 0) { -+ if (libxl_domain_destroy(priv->ctx, vm->def->id, NULL) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Failed to destroy domain '%d'"), dom->id); -+ _("Failed to destroy domain '%d'"), vm->def->id); - goto unpause; - } - -@@ -1524,10 +1525,10 @@ libxlDomainCoreDump(virDomainPtr dom, co - - unpause: - if (virDomainObjIsActive(vm) && paused) { -- if (libxl_domain_unpause(priv->ctx, dom->id) != 0) { -+ if (libxl_domain_unpause(priv->ctx, vm->def->id) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("After dumping core, failed to resume domain '%d' with" -- " libxenlight"), dom->id); -+ " libxenlight"), vm->def->id); - } else { - virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, - VIR_DOMAIN_RUNNING_UNPAUSED); -@@ -1786,19 +1787,19 @@ libxlDomainSetVcpusFlags(virDomainPtr do - break; - - case VIR_DOMAIN_VCPU_LIVE: -- if (libxl_set_vcpuonline(priv->ctx, dom->id, &map) != 0) { -+ if (libxl_set_vcpuonline(priv->ctx, vm->def->id, &map) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to set vcpus for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - break; - - case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG: -- if (libxl_set_vcpuonline(priv->ctx, dom->id, &map) != 0) { -+ if (libxl_set_vcpuonline(priv->ctx, vm->def->id, &map) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to set vcpus for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - def->vcpus = nvcpus; -@@ -1934,7 +1935,7 @@ libxlDomainPinVcpuFlags(virDomainPtr dom - libxlDomainObjPrivatePtr priv; - - priv = vm->privateData; -- if (libxl_set_vcpuaffinity(priv->ctx, dom->id, vcpu, &map) != 0) { -+ if (libxl_set_vcpuaffinity(priv->ctx, vm->def->id, vcpu, &map) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to pin vcpu '%d' with libxenlight"), - vcpu); -@@ -2099,11 +2100,11 @@ libxlDomainGetVcpus(virDomainPtr dom, vi - } - - priv = vm->privateData; -- if ((vcpuinfo = libxl_list_vcpu(priv->ctx, dom->id, &maxcpu, -+ if ((vcpuinfo = libxl_list_vcpu(priv->ctx, vm->def->id, &maxcpu, - &hostcpus)) == NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to list vcpus for domain '%d' with libxenlight"), -- dom->id); -+ vm->def->id); - goto cleanup; - } - -@@ -3608,7 +3609,7 @@ libxlDomainGetSchedulerType(virDomainPtr - default: - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to get scheduler id for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto cleanup; - } - -@@ -3659,10 +3660,10 @@ libxlDomainGetSchedulerParametersFlags(v - goto cleanup; - } - -- if (libxl_domain_sched_params_get(priv->ctx, dom->id, &sc_info) != 0) { -+ if (libxl_domain_sched_params_get(priv->ctx, vm->def->id, &sc_info) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to get scheduler parameters for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto cleanup; - } - -@@ -3740,10 +3741,10 @@ libxlDomainSetSchedulerParametersFlags(v - goto endjob; - } - -- if (libxl_domain_sched_params_get(priv->ctx, dom->id, &sc_info) != 0) { -+ if (libxl_domain_sched_params_get(priv->ctx, vm->def->id, &sc_info) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to get scheduler parameters for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - -@@ -3756,10 +3757,10 @@ libxlDomainSetSchedulerParametersFlags(v - sc_info.cap = params[i].value.ui; - } - -- if (libxl_domain_sched_params_set(priv->ctx, dom->id, &sc_info) != 0) { -+ if (libxl_domain_sched_params_set(priv->ctx, vm->def->id, &sc_info) != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to set scheduler parameters for domain '%d'" -- " with libxenlight"), dom->id); -+ " with libxenlight"), vm->def->id); - goto endjob; - } - diff --git a/7a1452f5-libxl-empty-cdrom.patch b/7a1452f5-libxl-empty-cdrom.patch deleted file mode 100644 index 1aa2638..0000000 --- a/7a1452f5-libxl-empty-cdrom.patch +++ /dev/null @@ -1,31 +0,0 @@ -commit 7a1452f5334f98680187ae6d11fe2a49c1b38548 -Author: Stefan Bader -Date: Thu Mar 27 17:55:03 2014 +0100 - - libxl: Set disk format for empty cdrom device - - The XML config for a CDROM device can be without a source path, - indicating that there is no media present. Without this change - the libxl driver fails to start a guest in that case because - the libxl library checks for the LIBXL_DISK_FORMAT_EMPTY format - type and tries to stat the NULL pointer that gets passed on. - - > libxl: error: libxl_device.c:265:libxl__device_disk_set_backend: - > Disk vdev=hdc failed to stat: (null): Bad address - - Signed-off-by: Stefan Bader - -Index: libvirt-1.2.3/src/libxl/libxl_conf.c -=================================================================== ---- libvirt-1.2.3.orig/src/libxl/libxl_conf.c -+++ libvirt-1.2.3/src/libxl/libxl_conf.c -@@ -827,6 +827,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk - x_disk->removable = 1; - x_disk->readwrite = !l_disk->readonly; - x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; -+ /* An empty CDROM must have the empty format, otherwise libxl fails. */ -+ if (x_disk->is_cdrom && !x_disk->pdev_path) -+ x_disk->format = LIBXL_DISK_FORMAT_EMPTY; - if (l_disk->transient) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("libxenlight does not support transient disks")); diff --git a/99f50208-managed-hostdev-iface.patch b/99f50208-managed-hostdev-iface.patch new file mode 100644 index 0000000..6e7f16d --- /dev/null +++ b/99f50208-managed-hostdev-iface.patch @@ -0,0 +1,40 @@ +commit 99f50208c9ff49bbb8b864407be02522976c1b4f +Author: Chunyan Liu +Date: Thu May 8 14:44:05 2014 +0800 + + update documentation of + + is supported, but + nowhere mentions 'managed' in syntax. + Update documentation to cover it. + + Signed-off-by: Chunyan Liu + +Index: libvirt-1.2.4/docs/formatdomain.html.in +=================================================================== +--- libvirt-1.2.4.orig/docs/formatdomain.html.in ++++ libvirt-1.2.4/docs/formatdomain.html.in +@@ -3507,10 +3507,22 @@ + guest instead of <interface type='hostdev'/>. +

+ ++

++ Similar to the functionality of a standard <hostdev> device, ++ when managed is "yes", it is detached from the host ++ before being passed on to the guest, and reattached to the host ++ after the guest exits. If managed is omitted or "no", ++ the user is responsible to call virNodeDeviceDettach ++ (or virsh nodedev-dettach) before starting the guest ++ or hot-plugging the device, and virNodeDeviceReAttach ++ (or virsh nodedev-reattach) after hot-unplug or ++ stopping the guest. ++

++ +
+   ...
+   <devices>
+-    <interface type='hostdev'>
++    <interface type='hostdev' managed='yes'>
+       <driver name='vfio'/>
+       <source>
+         <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
diff --git a/fd43d1f8-libxl-iface-hostdev.patch b/fd43d1f8-libxl-iface-hostdev.patch
new file mode 100644
index 0000000..24cf066
--- /dev/null
+++ b/fd43d1f8-libxl-iface-hostdev.patch
@@ -0,0 +1,55 @@
+commit fd43d1f8bd3e8381d266f7c2a7e701568b29e2aa
+Author: Chunyan Liu 
+Date:   Thu May 8 14:44:04 2014 +0800
+
+    libxl: fix support for  syntax
+    
+    A VIR_DOMAIN_NET_TYPE_HOSTDEV interface device is really a hostdev
+    device, which is created by the libxl driver in libxlMakePCIList().
+    There is no need to create a libxl_device_nic for such hostdev
+    devices, so skip interfaces of type VIR_DOMAIN_NET_TYPE_HOSTDEV in
+    libxlMakeNicList().
+    
+    Signed-off-by: Chunyan Liu 
+
+Index: libvirt-1.2.4/src/libxl/libxl_conf.c
+===================================================================
+--- libvirt-1.2.4.orig/src/libxl/libxl_conf.c
++++ libvirt-1.2.4/src/libxl/libxl_conf.c
+@@ -921,25 +921,31 @@ static int
+ libxlMakeNicList(virDomainDefPtr def,  libxl_domain_config *d_config)
+ {
+     virDomainNetDefPtr *l_nics = def->nets;
+-    int nnics = def->nnets;
++    size_t nnics = def->nnets;
+     libxl_device_nic *x_nics;
+-    size_t i;
++    size_t i, nvnics = 0;
+ 
+     if (VIR_ALLOC_N(x_nics, nnics) < 0)
+         return -1;
+ 
+     for (i = 0; i < nnics; i++) {
+-        if (libxlMakeNic(def, l_nics[i], &x_nics[i]))
++        if (l_nics[i]->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)
++            continue;
++
++        if (libxlMakeNic(def, l_nics[i], &x_nics[nvnics]))
+             goto error;
+         /*
+          * The devid (at least right now) will not get initialized by
+          * libxl in the setup case but is required for starting the
+          * device-model.
+          */
+-        if (x_nics[i].devid < 0)
+-            x_nics[i].devid = i;
++        if (x_nics[nvnics].devid < 0)
++            x_nics[nvnics].devid = nvnics;
++
++        nvnics++;
+     }
+ 
++    VIR_SHRINK_N(x_nics, nnics, nnics - nvnics);
+     d_config->nics = x_nics;
+     d_config->num_nics = nnics;
+ 
diff --git a/libvirt.changes b/libvirt.changes
index 3150849..886c5bc 100644
--- a/libvirt.changes
+++ b/libvirt.changes
@@ -1,3 +1,10 @@
+-------------------------------------------------------------------
+Mon May 12 15:22:08 MDT 2014 - jfehlig@suse.com
+
+- libxl: Fix  syntax for SR-IOV devices
+  fd43d1f8-libxl-iface-hostdev.patch,
+  99f50208-managed-hostdev-iface.patch
+
 -------------------------------------------------------------------
 Tue May  6 11:53:14 MDT 2014 - jfehlig@suse.com
 
diff --git a/libvirt.spec b/libvirt.spec
index 1d246d5..4b934af 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -432,6 +432,8 @@ Patch0:         b98bf811-add-paravirt-shutdown-flag.patch
 Patch1:         c4fe29f8-use-shutdown-flag.patch
 Patch2:         da744120-use-reboot-flag.patch
 Patch3:         d6b27d3e-CVE-2014-0179.patch
+Patch4:         fd43d1f8-libxl-iface-hostdev.patch
+Patch5:         99f50208-managed-hostdev-iface.patch
 # Need to go upstream
 Patch100:       xen-name-for-devid.patch
 Patch101:       ia64-clone.patch
@@ -954,6 +956,8 @@ namespaces.
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
+%patch5 -p1
 %patch100 -p1
 %patch101 -p1
 %patch102 -p1