Re: [libvirt] [PATCH] Fix bug of attaching redirdev device

ping?
On 18 Feb 2016, at 16:02, Osier Yang <osier@yunify.com> wrote:
RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1298070
The corresponding chardev must be attached first, otherwise the the qemu command line won't be complete (missing the host part), --- src/qemu/qemu_hotplug.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index ee305e7..5095e31 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1381,6 +1381,7 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, int ret; qemuDomainObjPrivatePtr priv = vm->privateData; virDomainDefPtr def = vm->def; + char *charAlias = NULL; char *devstr = NULL;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) { @@ -1391,21 +1392,33 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver,
if (qemuAssignDeviceRedirdevAlias(vm->def, redirdev, -1) < 0) goto error; - if (!(devstr = qemuBuildRedirdevDevStr(def, redirdev, priv->qemuCaps))) - goto error;
- if (VIR_REALLOC_N(vm->def->redirdevs, vm->def->nredirdevs+1) < 0) + if (virAsprintf(&charAlias, "char%s", redirdev->info.alias) < 0) goto error;
qemuDomainObjEnterMonitor(driver, vm); + if (qemuMonitorAttachCharDev(priv->mon, + charAlias, + &(redirdev->source.chr)) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto error; + } + VIR_FREE(charAlias); + + if (!(devstr = qemuBuildRedirdevDevStr(def, redirdev, priv->qemuCaps))) + goto rollback; + + if (VIR_REALLOC_N(vm->def->redirdevs, vm->def->nredirdevs+1) < 0) + goto rollback; + ret = qemuMonitorAddDevice(priv->mon, devstr);
if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto error; + goto rollback;
virDomainAuditRedirdev(vm, redirdev, "attach", ret == 0); if (ret < 0) - goto error; + goto rollback;
vm->def->redirdevs[vm->def->nredirdevs++] = redirdev;
@@ -1414,9 +1427,13 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, return 0;
error: + VIR_FREE(charAlias); VIR_FREE(devstr); return -1;
+ rollback: + ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); + goto error; }
static int -- 2.1.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
participants (1)
-
Osier Yang