提交 9807c471 编写于 作者: M Michal Privoznik

qemuDomainAttachChrDevice: Fix chardev hotplug

Not every chardev is plugged onto virtio-serial bus. However, the
code introduced in 89e991a2 assumes that. Incorrectly.
With previous patches we have three options where a chardev can
be plugged: virtio-serial, USB and PCI. This commit fixes the
attach part.  However, since we are not auto allocating USB
addresses yet, I'm just marking the place where appropriate code
should go.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 8e33cb41
......@@ -1556,11 +1556,18 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO)
allowZero = true;
if (virDomainVirtioSerialAddrAutoAssign(NULL,
priv->vioserialaddrs,
&chr->info,
allowZero) < 0)
goto cleanup;
if (chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI) {
if (virDomainPCIAddressEnsureAddr(priv->pciaddrs, &chr->info) < 0)
goto cleanup;
} else if (chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) {
/* XXX */
} else {
if (virDomainVirtioSerialAddrAutoAssign(NULL,
priv->vioserialaddrs,
&chr->info,
allowZero) < 0)
goto cleanup;
}
need_release = true;
if (qemuBuildChrDeviceStr(&devstr, vm->def, chr, priv->qemuCaps) < 0)
......@@ -1594,8 +1601,15 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
cleanup:
if (ret < 0 && virDomainObjIsActive(vm))
qemuDomainChrInsertPreAllocCleanup(vm->def, chr);
if (ret < 0 && need_release)
virDomainVirtioSerialAddrRelease(priv->vioserialaddrs, &chr->info);
if (ret < 0 && need_release) {
if (chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI) {
qemuDomainReleaseDeviceAddress(vm, &chr->info, NULL);
} else if (chr->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB) {
/* XXX */
} else {
virDomainVirtioSerialAddrRelease(priv->vioserialaddrs, &chr->info);
}
}
VIR_FREE(charAlias);
VIR_FREE(devstr);
return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册