[libvirt] [PATCH v2] qemu: Don't set address type too early during virtio disk hotplug

Guido Günther agx at sigxcpu.org
Mon Mar 25 11:00:10 UTC 2013


On Fri, Mar 22, 2013 at 06:52:46PM +0100, Guido Günther wrote:
> f946462e14ac036357b7c11ce5c23f94a3ee4e49 changed behavior by settings
> VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI upfront. If we do so before invoking
> qemuDomainPCIAddressEnsureAddr we merely try to set the PCI slot via
> qemuDomainPCIAddressReserveSlot instead reserving a new address via
> qemuDomainPCIAddressSetNextAddr which fails with
> 
> $ ~/run-tck-test domain/200-disk-hotplug.t
> ./scripts/domain/200-disk-hotplug.t .. # Creating a new transient domain
> ./scripts/domain/200-disk-hotplug.t .. 1/5 # Attaching the new disk /var/lib/jenkins/jobs/libvirt-tck-build/workspace/scratchdir/200-disk-hotplug/extra.img
> 
>  #   Failed test 'disk has been attached'
>  #   at ./scripts/domain/200-disk-hotplug.t line 67.
>  # died: Sys::Virt::Error (libvirt error code: 1, message: internal error unable to reserve PCI address 0:0:0.0
>  # )
> ---
> v2 merely fixes a typo in $subject.

Ping? I'm sorry for being that impatient but I'd really love to see the
TCK tests switch back to green (at least for a while).
Cheers,
 -- Guido

>  -- Guido
> 
>  src/qemu/qemu_hotplug.c |   11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index de9edd4..b978b97 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -226,7 +226,6 @@ int qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
>              disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
>          else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390))
>              disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390;
> -        else disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
>      }
>  
>      for (i = 0 ; i < vm->def->ndisks ; i++) {
> @@ -253,7 +252,8 @@ int qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
>              if (qemuDomainCCWAddressAssign(&disk->info, priv->ccwaddrs,
>                                             !disk->info.addr.ccw.assigned) < 0)
>                  goto error;
> -        } else if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
> +        } else if (!disk->info.type ||
> +                    disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
>              if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0)
>                  goto error;
>          }
> @@ -291,14 +291,17 @@ int qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
>                  }
>              }
>          }
> -    } else if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI){
> +    } else if (!disk->info.type ||
> +                disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
>          virDevicePCIAddress guestAddr = disk->info.addr.pci;
>          ret = qemuMonitorAddPCIDisk(priv->mon,
>                                      disk->src,
>                                      type,
>                                      &guestAddr);
> -        if (ret == 0)
> +        if (ret == 0) {
> +            disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
>              memcpy(&disk->info.addr.pci, &guestAddr, sizeof(guestAddr));
> +        }
>      }
>      qemuDomainObjExitMonitor(driver, vm);
>  
> -- 
> 1.7.10.4
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list