[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