61 lines
2.4 KiB
Diff
61 lines
2.4 KiB
Diff
|
commit e0241f334d4e8da2e36cda48c225d5a6edcc3a50
|
||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||
|
Date: Tue Feb 1 17:03:11 2022 -0700
|
||
|
|
||
|
libxl: Set auto-allocated graphics ports to used on reconnect
|
||
|
|
||
|
The libxl driver reconnects to all running VMs when libvirtd is restarted,
|
||
|
but it failed to mark auto-allocated graphics ports as set in the port
|
||
|
allocator. If many VMs are running that use port auto-allocation and
|
||
|
libvirtd is restarted, the port allocator is likely to hand out a port
|
||
|
already in use when a new VM is created that uses auto-allocation. VM
|
||
|
creation will fail due to the port clash.
|
||
|
|
||
|
When reconnecting to running VMs after a libvirtd restart, let the port
|
||
|
allocator know about previously allocated ports.
|
||
|
|
||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||
|
|
||
|
Index: libvirt-8.0.0/src/libxl/libxl_driver.c
|
||
|
===================================================================
|
||
|
--- libvirt-8.0.0.orig/src/libxl/libxl_driver.c
|
||
|
+++ libvirt-8.0.0/src/libxl/libxl_driver.c
|
||
|
@@ -393,6 +393,7 @@ libxlReconnectDomain(virDomainObj *vm,
|
||
|
virHostdevManager *hostdev_mgr = driver->hostdevMgr;
|
||
|
unsigned int hostdev_flags = VIR_HOSTDEV_SP_PCI;
|
||
|
int ret = -1;
|
||
|
+ size_t i;
|
||
|
|
||
|
hostdev_flags |= VIR_HOSTDEV_SP_USB;
|
||
|
|
||
|
@@ -447,6 +448,28 @@ libxlReconnectDomain(virDomainObj *vm,
|
||
|
|
||
|
libxlReconnectNotifyNets(vm->def);
|
||
|
|
||
|
+ /* Set any auto-allocated graphics ports to used */
|
||
|
+ for (i = 0; i < vm->def->ngraphics; i++) {
|
||
|
+ virDomainGraphicsDef *graphics = vm->def->graphics[i];
|
||
|
+
|
||
|
+ switch (graphics->type) {
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
||
|
+ if (graphics->data.vnc.autoport)
|
||
|
+ virPortAllocatorSetUsed(graphics->data.vnc.port);
|
||
|
+ break;
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||
|
+ if (graphics->data.spice.autoport)
|
||
|
+ virPortAllocatorSetUsed(graphics->data.spice.port);
|
||
|
+ break;
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||
|
+ case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)
|
||
|
VIR_WARN("Cannot update XML for running Xen guest %s", vm->def->name);
|
||
|
|