On Wed, Jul 10, 2013 at 07:02:52PM +0200, Michal Privoznik wrote:
There are two levels on which a device may be hotplugged: config
and live. The config level requires just an insert or remove from
internal domain definition structure, which is exactly what this
patch does. There is currently no implementation for a chardev
update action, as there's not much to be updated. But more
importantly, the only thing that can be updated is path or socket
address by which chardevs are distinguished. So the update action
is currently not supported.
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index b0180c9..d858131 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6607,6 +6607,7 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
virDomainHostdevDefPtr hostdev;
virDomainLeaseDefPtr lease;
virDomainControllerDefPtr controller;
+ virDomainChrDefPtr chr;
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
@@ -6682,10 +6683,23 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
return -1;
break;
+ case VIR_DOMAIN_DEVICE_CHR:
+ chr = dev->data.chr;
+ if (virDomainChrFind(vmdef, chr)) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("chardev already exists"));
+ return -1;
+ }
+
+ if (virDomainChrInsert(vmdef, chr) < 0)
+ return -1;
+ dev->data.chr = NULL;
+ break;
Hmm, this is unconditionally adding the device to the list, which in
general is fine..... except for the magic serial/console duplication.
If we have zero serial devices + zero console devices, and then
hotplug a serial device, we must duplicate that as the first console
device.
We should also refuse to allow you to hotplug a <console> element
with target type == serial.
@@ -6767,6 +6782,18 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr
vmdef,
break;
+ case VIR_DOMAIN_DEVICE_CHR:
+ if (!(chr = virDomainChrRemove(vmdef, dev->data.chr))) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("device not present in domain configuration"));
+ return -1;
+ }
+
+ virDomainChrDefFree(chr);
+ virDomainChrDefFree(dev->data.chr);
+ dev->data.chr = NULL;
+ break;
And if we remove the first serial device here, then we also need to
remove the compat console device with targettype==serial
And probably ought to forbid removing a <console> with type=serial,
instead requiring them to remove the <serial> device instead.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|