diff --git a/18ec405a-libxl-release-graphics-ports.patch b/18ec405a-libxl-release-graphics-ports.patch new file mode 100644 index 0000000..ed2c25a --- /dev/null +++ b/18ec405a-libxl-release-graphics-ports.patch @@ -0,0 +1,69 @@ +commit 18ec405a36e24c86abe1104699c0bffdc91d5169 +Author: Jim Fehlig +Date: Mon Feb 7 13:57:07 2022 -0700 + + libxl: Release auto-allocated spice ports + + While VNC ports auto-allocated by the libxl driver are released in + libxlDomainCleanup, spice ports are overlooked. Rework the existing + logic to release any auto-allocated graphics ports, not just the VNC + port of the first graphics device. + + Signed-off-by: Jim Fehlig + Reviewed-by: Ján Tomko + +Index: libvirt-8.0.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-8.0.0.orig/src/libxl/libxl_domain.c ++++ libvirt-8.0.0/src/libxl/libxl_domain.c +@@ -906,10 +906,10 @@ libxlDomainCleanup(libxlDriverPrivate *d + { + libxlDomainObjPrivate *priv = vm->privateData; + g_autoptr(libxlDriverConfig) cfg = libxlDriverConfigGet(driver); +- int vnc_port; + char *file; + virHostdevManager *hostdev_mgr = driver->hostdevMgr; + unsigned int hostdev_flags = VIR_HOSTDEV_SP_PCI; ++ size_t i; + + VIR_DEBUG("Cleaning up domain with id '%d' and name '%s'", + vm->def->id, vm->def->name); +@@ -944,13 +944,31 @@ libxlDomainCleanup(libxlDriverPrivate *d + if (!!g_atomic_int_dec_and_test(&driver->nactive) && driver->inhibitCallback) + driver->inhibitCallback(false, driver->inhibitOpaque); + +- if ((vm->def->ngraphics == 1) && +- vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && +- vm->def->graphics[0]->data.vnc.autoport) { +- vnc_port = vm->def->graphics[0]->data.vnc.port; +- if (vnc_port >= LIBXL_VNC_PORT_MIN) { +- if (virPortAllocatorRelease(vnc_port) < 0) +- VIR_DEBUG("Could not mark port %d as unused", vnc_port); ++ /* Release auto-allocated graphics ports */ ++ for (i = 0; i < vm->def->ngraphics; i++) { ++ virDomainGraphicsDef *graphics = vm->def->graphics[i]; ++ int gport = -1; ++ ++ switch (graphics->type) { ++ case VIR_DOMAIN_GRAPHICS_TYPE_VNC: ++ if (graphics->data.vnc.autoport && ++ graphics->data.vnc.port >= LIBXL_VNC_PORT_MIN) ++ gport = graphics->data.vnc.port; ++ break; ++ case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: ++ if (graphics->data.spice.autoport) ++ gport = 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 (gport != -1) { ++ if (virPortAllocatorRelease(gport) < 0) ++ VIR_DEBUG("Could not mark port %d as unused", gport); + } + } + diff --git a/libvirt.changes b/libvirt.changes index a8432d2..18cd66b 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -3,6 +3,8 @@ Mon Feb 7 21:32:20 UTC 2022 - James Fehlig - libxl: Mark auto-allocated graphics ports to used on reconnect e0241f33-libxl-mark-allocated-graphics-ports.patch +- libxl: Release all auto-allocated graphics ports + 18ec405a-libxl-release-graphics-ports.patch bsc#1191668 ------------------------------------------------------------------- diff --git a/libvirt.spec b/libvirt.spec index 84fe889..9e9eed9 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -307,6 +307,7 @@ Patch2: 8eb44616-remove-sysconfig-files.patch Patch3: 31e937fb-libxl-save-lock-indicator.patch Patch4: 105dace2-revert-virProcessGetStatInfo.patch Patch5: e0241f33-libxl-mark-allocated-graphics-ports.patch +Patch6: 18ec405a-libxl-release-graphics-ports.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch