diff --git a/0001-Extract-stats-functions-from-the-qemu-driver.patch b/0001-Extract-stats-functions-from-the-qemu-driver.patch index ee3d3a0..ee3962c 100644 --- a/0001-Extract-stats-functions-from-the-qemu-driver.patch +++ b/0001-Extract-stats-functions-from-the-qemu-driver.patch @@ -18,10 +18,10 @@ them. create mode 100644 src/conf/domain_stats.c create mode 100644 src/conf/domain_stats.h -Index: libvirt-7.9.0/src/conf/domain_stats.c +Index: libvirt-7.10.0/src/conf/domain_stats.c =================================================================== --- /dev/null -+++ libvirt-7.9.0/src/conf/domain_stats.c ++++ libvirt-7.10.0/src/conf/domain_stats.c @@ -0,0 +1,117 @@ +/* + * domain_stats.c: domain stats extraction helpers @@ -140,10 +140,10 @@ Index: libvirt-7.9.0/src/conf/domain_stats.c +} + +#undef STATS_ADD_NET_PARAM -Index: libvirt-7.9.0/src/conf/domain_stats.h +Index: libvirt-7.10.0/src/conf/domain_stats.h =================================================================== --- /dev/null -+++ libvirt-7.9.0/src/conf/domain_stats.h ++++ libvirt-7.10.0/src/conf/domain_stats.h @@ -0,0 +1,60 @@ +/* + * domain_stats.h: domain stats extraction helpers @@ -205,11 +205,11 @@ Index: libvirt-7.9.0/src/conf/domain_stats.h + virTypedParamList *params); + +#endif /* __DOMAIN_STATS_H */ -Index: libvirt-7.9.0/src/libvirt_private.syms +Index: libvirt-7.10.0/src/libvirt_private.syms =================================================================== ---- libvirt-7.9.0.orig/src/libvirt_private.syms -+++ libvirt-7.9.0/src/libvirt_private.syms -@@ -768,6 +768,11 @@ virDomainConfNWFilterTeardown; +--- libvirt-7.10.0.orig/src/libvirt_private.syms ++++ libvirt-7.10.0/src/libvirt_private.syms +@@ -770,6 +770,11 @@ virDomainConfNWFilterTeardown; virDomainConfVMNWFilterTeardown; @@ -221,7 +221,7 @@ Index: libvirt-7.9.0/src/libvirt_private.syms # conf/domain_validate.h virDomainActualNetDefValidate; virDomainDefValidate; -@@ -1944,6 +1949,7 @@ virCgroupGetMemoryUsage; +@@ -1950,6 +1955,7 @@ virCgroupGetMemoryUsage; virCgroupGetMemSwapHardLimit; virCgroupGetMemSwapUsage; virCgroupGetPercpuStats; @@ -229,10 +229,10 @@ Index: libvirt-7.9.0/src/libvirt_private.syms virCgroupHasController; virCgroupHasEmptyTasks; virCgroupKillPainfully; -Index: libvirt-7.9.0/src/qemu/qemu_driver.c +Index: libvirt-7.10.0/src/qemu/qemu_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/qemu/qemu_driver.c -+++ libvirt-7.9.0/src/qemu/qemu_driver.c +--- libvirt-7.10.0.orig/src/qemu/qemu_driver.c ++++ libvirt-7.10.0/src/qemu/qemu_driver.c @@ -68,6 +68,7 @@ #include "virarptable.h" #include "viruuid.h" @@ -241,7 +241,7 @@ Index: libvirt-7.9.0/src/qemu/qemu_driver.c #include "domain_audit.h" #include "domain_cgroup.h" #include "domain_driver.h" -@@ -17584,13 +17585,7 @@ qemuDomainGetStatsState(virQEMUDriver *d +@@ -17530,13 +17531,7 @@ qemuDomainGetStatsState(virQEMUDriver *d virTypedParamList *params, unsigned int privflags G_GNUC_UNUSED) { @@ -256,7 +256,7 @@ Index: libvirt-7.9.0/src/qemu/qemu_driver.c } -@@ -17882,25 +17877,11 @@ qemuDomainGetStatsCpuCgroup(virDomainObj +@@ -17828,25 +17823,11 @@ qemuDomainGetStatsCpuCgroup(virDomainObj virTypedParamList *params) { qemuDomainObjPrivate *priv = dom->privateData; @@ -283,7 +283,7 @@ Index: libvirt-7.9.0/src/qemu/qemu_driver.c } static int -@@ -18093,76 +18074,15 @@ qemuDomainGetStatsVcpu(virQEMUDriver *dr +@@ -18039,76 +18020,15 @@ qemuDomainGetStatsVcpu(virQEMUDriver *dr return ret; } @@ -361,11 +361,11 @@ Index: libvirt-7.9.0/src/qemu/qemu_driver.c /* refresh information by opening images on the disk */ static int -Index: libvirt-7.9.0/src/util/vircgroup.c +Index: libvirt-7.10.0/src/util/vircgroup.c =================================================================== ---- libvirt-7.9.0.orig/src/util/vircgroup.c -+++ libvirt-7.9.0/src/util/vircgroup.c -@@ -3036,6 +3036,31 @@ virCgroupGetInode(virCgroup *cgroup) +--- libvirt-7.10.0.orig/src/util/vircgroup.c ++++ libvirt-7.10.0/src/util/vircgroup.c +@@ -3033,6 +3033,31 @@ virCgroupGetInode(virCgroup *cgroup) return st.st_ino; } @@ -397,7 +397,7 @@ Index: libvirt-7.9.0/src/util/vircgroup.c #else /* !__linux__ */ bool -@@ -3045,6 +3070,14 @@ virCgroupAvailable(void) +@@ -3042,6 +3067,14 @@ virCgroupAvailable(void) } @@ -412,10 +412,10 @@ Index: libvirt-7.9.0/src/util/vircgroup.c int virCgroupNewPartition(const char *path G_GNUC_UNUSED, bool create G_GNUC_UNUSED, -Index: libvirt-7.9.0/src/util/vircgroup.h +Index: libvirt-7.10.0/src/util/vircgroup.h =================================================================== ---- libvirt-7.9.0.orig/src/util/vircgroup.h -+++ libvirt-7.9.0/src/util/vircgroup.h +--- libvirt-7.10.0.orig/src/util/vircgroup.h ++++ libvirt-7.10.0/src/util/vircgroup.h @@ -23,6 +23,7 @@ #include "virbitmap.h" @@ -432,10 +432,10 @@ Index: libvirt-7.9.0/src/util/vircgroup.h + virTypedParamList *params); + int virCgroupGetInode(virCgroup *cgroup); -Index: libvirt-7.9.0/src/conf/meson.build +Index: libvirt-7.10.0/src/conf/meson.build =================================================================== ---- libvirt-7.9.0.orig/src/conf/meson.build -+++ libvirt-7.9.0/src/conf/meson.build +--- libvirt-7.10.0.orig/src/conf/meson.build ++++ libvirt-7.10.0/src/conf/meson.build @@ -15,6 +15,7 @@ domain_conf_sources = [ 'domain_conf.c', 'domain_nwfilter.c', diff --git a/0001-libxl-add-support-for-BlockResize-API.patch b/0001-libxl-add-support-for-BlockResize-API.patch index f6af6a6..12b4079 100644 --- a/0001-libxl-add-support-for-BlockResize-API.patch +++ b/0001-libxl-add-support-for-BlockResize-API.patch @@ -19,11 +19,11 @@ reworking this patch and submitting it to upstream libvirt. src/libxl/libxl_driver.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) -Index: libvirt-7.9.0/src/libxl/libxl_driver.c +Index: libvirt-7.10.0/src/libxl/libxl_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_driver.c -+++ libvirt-7.9.0/src/libxl/libxl_driver.c -@@ -5265,6 +5265,95 @@ libxlDomainMemoryStats(virDomainPtr dom, +--- libvirt-7.10.0.orig/src/libxl/libxl_driver.c ++++ libvirt-7.10.0/src/libxl/libxl_driver.c +@@ -5254,6 +5254,95 @@ libxlDomainMemoryStats(virDomainPtr dom, #undef LIBXL_SET_MEMSTAT @@ -119,7 +119,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c static int libxlDomainGetJobInfo(virDomainPtr dom, virDomainJobInfoPtr info) -@@ -6563,6 +6652,7 @@ static virHypervisorDriver libxlHypervis +@@ -6552,6 +6641,7 @@ static virHypervisorDriver libxlHypervis .domainGetNumaParameters = libxlDomainGetNumaParameters, /* 1.1.1 */ .nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */ .nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */ @@ -127,10 +127,10 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c .domainGetJobInfo = libxlDomainGetJobInfo, /* 1.3.1 */ .domainGetJobStats = libxlDomainGetJobStats, /* 1.3.1 */ .domainMemoryStats = libxlDomainMemoryStats, /* 1.3.0 */ -Index: libvirt-7.9.0/src/libxl/libxl_api_wrapper.h +Index: libvirt-7.10.0/src/libxl/libxl_api_wrapper.h =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_api_wrapper.h -+++ libvirt-7.9.0/src/libxl/libxl_api_wrapper.h +--- libvirt-7.10.0.orig/src/libxl/libxl_api_wrapper.h ++++ libvirt-7.10.0/src/libxl/libxl_api_wrapper.h @@ -215,3 +215,18 @@ libxlSetMemoryTargetWrapper(libxl_ctx *c return ret; diff --git a/0002-lxc-implement-connectGetAllDomainStats.patch b/0002-lxc-implement-connectGetAllDomainStats.patch index a4543b8..6526d02 100644 --- a/0002-lxc-implement-connectGetAllDomainStats.patch +++ b/0002-lxc-implement-connectGetAllDomainStats.patch @@ -9,10 +9,10 @@ them using the existing API. src/lxc/lxc_driver.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) -Index: libvirt-7.9.0/src/lxc/lxc_driver.c +Index: libvirt-7.10.0/src/lxc/lxc_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/lxc/lxc_driver.c -+++ libvirt-7.9.0/src/lxc/lxc_driver.c +--- libvirt-7.10.0.orig/src/lxc/lxc_driver.c ++++ libvirt-7.10.0/src/lxc/lxc_driver.c @@ -74,6 +74,8 @@ #include "netdev_bandwidth_conf.h" #include "virsocket.h" @@ -22,7 +22,7 @@ Index: libvirt-7.9.0/src/lxc/lxc_driver.c #define VIR_FROM_THIS VIR_FROM_LXC -@@ -5083,6 +5085,128 @@ lxcDomainHasManagedSaveImage(virDomainPt +@@ -5075,6 +5077,128 @@ lxcDomainHasManagedSaveImage(virDomainPt return ret; } @@ -151,7 +151,7 @@ Index: libvirt-7.9.0/src/lxc/lxc_driver.c /* Function Tables */ static virHypervisorDriver lxcHypervisorDriver = { -@@ -5180,6 +5304,7 @@ static virHypervisorDriver lxcHypervisor +@@ -5172,6 +5296,7 @@ static virHypervisorDriver lxcHypervisor .nodeGetFreePages = lxcNodeGetFreePages, /* 1.2.6 */ .nodeAllocPages = lxcNodeAllocPages, /* 1.2.9 */ .domainHasManagedSaveImage = lxcDomainHasManagedSaveImage, /* 1.2.13 */ diff --git a/23b51d7b-libxl-disable-death-event.patch b/23b51d7b-libxl-disable-death-event.patch new file mode 100644 index 0000000..acab70f --- /dev/null +++ b/23b51d7b-libxl-disable-death-event.patch @@ -0,0 +1,105 @@ +commit 23b51d7b8ec885e97a9277cf0a6c2833db4636e8 +Author: Jim Fehlig +Date: Fri Oct 29 14:16:33 2021 -0600 + + libxl: Disable death events after receiving a shutdown event + + The libxl driver will handle all domain destruction and cleanup + when receiving a domain shutdown event from libxl. Commit fa30ee04a2a + introduced the ignoreDeathEvent boolean in the DomainObjPrivate struct + to ignore subsequent death events from libxl. But libxl already provides + a mechanism to disable death events via libxl_evdisable_domain_death. + + This patch partially reverts commit fa30ee04a2a and instead uses + libxl_evdisable_domain_death to disable subsequent death events when + processing a shutdown event. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.c ++++ libvirt-7.10.0/src/libxl/libxl_domain.c +@@ -616,12 +616,6 @@ static void + libxlDomainHandleDeath(libxlDriverPrivate *driver, virDomainObj *vm) + { + virObjectEvent *dom_event = NULL; +- libxlDomainObjPrivate *priv = vm->privateData; +- +- if (priv->ignoreDeathEvent) { +- priv->ignoreDeathEvent = false; +- return; +- } + + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) + return; +@@ -671,7 +665,6 @@ libxlDomainEventHandler(void *data, libx + } + + if (event->type == LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN) { +- libxlDomainObjPrivate *priv = vm->privateData; + struct libxlShutdownThreadInfo *shutdown_info = NULL; + virThread thread; + g_autofree char *name = NULL; +@@ -688,12 +681,9 @@ libxlDomainEventHandler(void *data, libx + name = g_strdup_printf("ev-%d", event->domid); + /* + * Cleanup will be handled by the shutdown thread. +- * Ignore the forthcoming death event from libxl + */ +- priv->ignoreDeathEvent = true; + if (virThreadCreateFull(&thread, false, libxlDomainShutdownThread, + name, false, shutdown_info) < 0) { +- priv->ignoreDeathEvent = false; + /* + * Not much we can do on error here except log it. + */ +@@ -859,18 +849,17 @@ libxlDomainDestroyInternal(libxlDriverPr + libxlDomainObjPrivate *priv = vm->privateData; + int ret = -1; + +- /* Ignore next LIBXL_EVENT_TYPE_DOMAIN_DEATH as the caller will handle +- * domain death appropriately already (having more info, like the reason). +- */ +- priv->ignoreDeathEvent = true; ++ if (priv->deathW) { ++ libxl_evdisable_domain_death(cfg->ctx, priv->deathW); ++ priv->deathW = NULL; ++ } ++ + /* Unlock virDomainObj during destroy, which can take considerable + * time on large memory domains. + */ + virObjectUnlock(vm); + ret = libxl_domain_destroy(cfg->ctx, vm->def->id, NULL); + virObjectLock(vm); +- if (ret) +- priv->ignoreDeathEvent = false; + + return ret; + } +@@ -921,8 +910,6 @@ libxlDomainCleanup(libxlDriverPrivate *d + priv->deathW = NULL; + } + +- priv->ignoreDeathEvent = false; +- + if (!!g_atomic_int_dec_and_test(&driver->nactive) && driver->inhibitCallback) + driver->inhibitCallback(false, driver->inhibitOpaque); + +Index: libvirt-7.10.0/src/libxl/libxl_domain.h +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.h ++++ libvirt-7.10.0/src/libxl/libxl_domain.h +@@ -54,9 +54,6 @@ struct _libxlDomainObjPrivate { + /* console */ + virChrdevs *devs; + libxl_evgen_domain_death *deathW; +- /* Flag to indicate the upcoming LIBXL_EVENT_TYPE_DOMAIN_DEATH is caused +- * by libvirt and should not be handled separately */ +- bool ignoreDeathEvent; + virThread *migrationDstReceiveThr; + unsigned short migrationPort; + char *lockState; diff --git a/5c5df531-libxl-search-domid-in-thread.patch b/5c5df531-libxl-search-domid-in-thread.patch new file mode 100644 index 0000000..a421d82 --- /dev/null +++ b/5c5df531-libxl-search-domid-in-thread.patch @@ -0,0 +1,167 @@ +commit 5c5df5310f72be4878a71ace47074c54e0d1a27d +Author: Jim Fehlig +Date: Wed Nov 24 11:48:51 2021 -0700 + + libxl: Search for virDomainObj in event handler threads + + libxl can deliver events and invoke callbacks on any application thread + calling into libxl. This can cause deadlock in the libvirt libxl driver + + Thread 19 (Thread 0x7f31411ec700 (LWP 14068) "libvirtd"): + #0 0x00007f318520cc7d in __lll_lock_wait () from /lib64/libpthread.so.0 + #1 0x00007f3185205ed5 in pthread_mutex_lock () from /lib64/libpthread.so.0 + #2 0x00007f3189488015 in virMutexLock (m=) at ../../src/util/virthread.c:79 + #3 0x00007f3189463f3b in virObjectLock (anyobj=) at ../../src/util/virobject.c:433 + #4 0x00007f31894f2f41 in virDomainObjListSearchID (payload=0x7f317400a6d0, name=, data=0x7f31411eaeac) at ../../src/conf/virdomainobjlist.c:105 + #5 0x00007f3189437ac5 in virHashSearch (ctable=0x7f3124025a30, iter=iter@entry=0x7f31894f2f30 , data=data@entry=0x7f31411eaeac, name=name@entry=0x0) at ../../src/util/virhash.c:745 + #6 0x00007f31894f3919 in virDomainObjListFindByID (doms=0x7f3124025430, id=) at ../../src/conf/virdomainobjlist.c:121 + #7 0x00007f3152f292e5 in libxlDomainEventHandler (data=0x7f3124023d80, event=0x7f310c010ae0) at ../../src/libxl/libxl_domain.c:660 + #8 0x00007f3152c6ff5d in egc_run_callbacks (egc=egc@entry=0x7f31411eaf50) at libxl_event.c:1427 + #9 0x00007f3152c718bd in libxl__egc_cleanup (egc=0x7f31411eaf50) at libxl_event.c:1458 + #10 libxl__ao_inprogress (ao=ao@entry=0x7f310c00b8a0, file=file@entry=0x7f3152cce987 "libxl_domain.c", line=line@entry=730, func=func@entry=0x7f3152ccf750 <__func__.22238> "libxl_domain_unpause") at libxl_event.c:2047 + #11 0x00007f3152c8c5b8 in libxl_domain_unpause (ctx=0x7f3124015a40, domid=, ao_how=ao_how@entry=0x0) at libxl_domain.c:730 + #12 0x00007f3152f2a584 in libxl_domain_unpause_0x041200 (domid=, ctx=) at /usr/include/libxl.h:1756 + #13 libxlDomainStart (driver=driver@entry=0x7f3124023d80, vm=vm@entry=0x7f317400a6d0, start_paused=start_paused@entry=false, restore_fd=restore_fd@entry=-1, restore_ver=, restore_ver@entry=2) at ../../src/libxl/libxl_domain.c:1482 + #14 0x00007f3152f2a6e3 in libxlDomainStartNew (driver=driver@entry=0x7f3124023d80, vm=vm@entry=0x7f317400a6d0, start_paused=start_paused@entry=false) at ../../src/libxl/libxl_domain.c:1545 + #15 0x00007f3152f2a789 in libxlDomainShutdownHandleRestart (driver=0x7f3124023d80, vm=0x7f317400a6d0) at ../../src/libxl/libxl_domain.c:464 + #16 0x00007f3152f2a9e4 in libxlDomainShutdownThread (opaque=) at ../../src/libxl/libxl_domain.c:559 + #17 0x00007f3189487ee2 in virThreadHelper (data=) at ../../src/util/virthread.c:196 + #18 0x00007f3185203539 in start_thread () from /lib64/libpthread.so.0 + #19 0x00007f3184f3becf in clone () from /lib64/libc.so.6 + + Frame 16 runs a thread created to handle domain shutdown processing for + domid 28712. In this case the event contained the reboot reason, so the + old domain is destroyed and a new one is created by libxlDomainStart new. + After starting the domain, it is unpaused by calling libxl_domain_unpause + in frame 12. While the thread is running within libxl, libxl takes the + opportunity to deliver a pending domain shutdown event for unrelated domid + 28710. While searching for the associated virDomainObj by ID, a deadlock is + encountered when attempting to lock the virDomainObj for domid 28712, which + is already locked since this thread is processing its shutdown event. + + The deadlock can be avoided by moving the search for a virDomainObj + associated with the event domid to the shutdown thread. The same is done + for the death thread. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.c ++++ libvirt-7.10.0/src/libxl/libxl_domain.c +@@ -480,7 +480,6 @@ libxlDomainShutdownHandleRestart(libxlDr + struct libxlEventHandlerThreadInfo + { + libxlDriverPrivate *driver; +- virDomainObj *vm; + libxl_event *event; + }; + +@@ -489,7 +488,7 @@ static void + libxlDomainShutdownThread(void *opaque) + { + struct libxlEventHandlerThreadInfo *shutdown_info = opaque; +- virDomainObj *vm = shutdown_info->vm; ++ virDomainObj *vm = NULL; + libxl_event *ev = shutdown_info->event; + libxlDriverPrivate *driver = shutdown_info->driver; + virObjectEvent *dom_event = NULL; +@@ -499,6 +498,12 @@ libxlDomainShutdownThread(void *opaque) + + libxl_domain_config_init(&d_config); + ++ vm = virDomainObjListFindByID(driver->domains, ev->domid); ++ if (!vm) { ++ /* Nothing to do if we can't find the virDomainObj */ ++ goto cleanup; ++ } ++ + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) + goto cleanup; + +@@ -616,12 +621,18 @@ static void + libxlDomainDeathThread(void *opaque) + { + struct libxlEventHandlerThreadInfo *death_info = opaque; +- virDomainObj *vm = death_info->vm; ++ virDomainObj *vm = NULL; + libxl_event *ev = death_info->event; + libxlDriverPrivate *driver = death_info->driver; + virObjectEvent *dom_event = NULL; + g_autoptr(libxlDriverConfig) cfg = libxlDriverConfigGet(driver); + ++ vm = virDomainObjListFindByID(driver->domains, ev->domid); ++ if (!vm) { ++ /* Nothing to do if we can't find the virDomainObj */ ++ goto cleanup; ++ } ++ + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) + goto cleanup; + +@@ -650,7 +661,6 @@ libxlDomainEventHandler(void *data, libx + { + libxlDriverPrivate *driver = data; + libxl_shutdown_reason xl_reason = event->u.domain_shutdown.shutdown_reason; +- virDomainObj *vm = NULL; + g_autoptr(libxlDriverConfig) cfg = NULL; + struct libxlEventHandlerThreadInfo *thread_info = NULL; + virThread thread; +@@ -671,12 +681,6 @@ libxlDomainEventHandler(void *data, libx + if (xl_reason == LIBXL_SHUTDOWN_REASON_SUSPEND) + goto cleanup; + +- vm = virDomainObjListFindByID(driver->domains, event->domid); +- if (!vm) { +- /* Nothing to do if we can't find the virDomainObj */ +- goto cleanup; +- } +- + /* + * Start event-specific threads to handle shutdown and death. + * They are potentially lengthy operations and we don't want to be +@@ -686,7 +690,6 @@ libxlDomainEventHandler(void *data, libx + thread_info = g_new0(struct libxlEventHandlerThreadInfo, 1); + + thread_info->driver = driver; +- thread_info->vm = vm; + thread_info->event = (libxl_event *)event; + thread_name = g_strdup_printf("shutdown-event-%d", event->domid); + /* +@@ -701,15 +704,14 @@ libxlDomainEventHandler(void *data, libx + goto cleanup; + } + /* +- * virDomainObjEndAPI is called in the shutdown thread, where +- * libxlEventHandlerThreadInfo and libxl_event are also freed. ++ * libxlEventHandlerThreadInfo and libxl_event are freed in the ++ * shutdown thread + */ + return; + } else if (event->type == LIBXL_EVENT_TYPE_DOMAIN_DEATH) { + thread_info = g_new0(struct libxlEventHandlerThreadInfo, 1); + + thread_info->driver = driver; +- thread_info->vm = vm; + thread_info->event = (libxl_event *)event; + thread_name = g_strdup_printf("death-event-%d", event->domid); + /* +@@ -724,14 +726,13 @@ libxlDomainEventHandler(void *data, libx + goto cleanup; + } + /* +- * virDomainObjEndAPI is called in the death thread, where +- * libxlEventHandlerThreadInfo and libxl_event are also freed. ++ * libxlEventHandlerThreadInfo and libxl_event are freed in the ++ * death thread + */ + return; + } + + cleanup: +- virDomainObjEndAPI(&vm); + VIR_FREE(thread_info); + cfg = libxlDriverConfigGet(driver); + /* Cast away any const */ diff --git a/a4e6fba0-libxl-rename-threadinfo-struct.patch b/a4e6fba0-libxl-rename-threadinfo-struct.patch new file mode 100644 index 0000000..a3b43f6 --- /dev/null +++ b/a4e6fba0-libxl-rename-threadinfo-struct.patch @@ -0,0 +1,63 @@ +commit a4e6fba069c0809b8b5dde5e9db62d2efd91b4a0 +Author: Jim Fehlig +Date: Wed Nov 24 11:10:19 2021 -0700 + + libxl: Rename libxlShutdownThreadInfo struct + + An upcoming change will use the struct in a thread created to process + death events. Rename libxlShutdownThreadInfo to libxlEventHandlerThreadInfo + to reflect the more generic usage. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.c ++++ libvirt-7.10.0/src/libxl/libxl_domain.c +@@ -477,7 +477,7 @@ libxlDomainShutdownHandleRestart(libxlDr + } + + +-struct libxlShutdownThreadInfo ++struct libxlEventHandlerThreadInfo + { + libxlDriverPrivate *driver; + virDomainObj *vm; +@@ -488,7 +488,7 @@ struct libxlShutdownThreadInfo + static void + libxlDomainShutdownThread(void *opaque) + { +- struct libxlShutdownThreadInfo *shutdown_info = opaque; ++ struct libxlEventHandlerThreadInfo *shutdown_info = opaque; + virDomainObj *vm = shutdown_info->vm; + libxl_event *ev = shutdown_info->event; + libxlDriverPrivate *driver = shutdown_info->driver; +@@ -665,7 +665,7 @@ libxlDomainEventHandler(void *data, libx + } + + if (event->type == LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN) { +- struct libxlShutdownThreadInfo *shutdown_info = NULL; ++ struct libxlEventHandlerThreadInfo *shutdown_info = NULL; + virThread thread; + g_autofree char *name = NULL; + +@@ -673,7 +673,7 @@ libxlDomainEventHandler(void *data, libx + * Start a thread to handle shutdown. We don't want to be tying up + * libxl's event machinery by doing a potentially lengthy shutdown. + */ +- shutdown_info = g_new0(struct libxlShutdownThreadInfo, 1); ++ shutdown_info = g_new0(struct libxlEventHandlerThreadInfo, 1); + + shutdown_info->driver = driver; + shutdown_info->vm = vm; +@@ -693,7 +693,7 @@ libxlDomainEventHandler(void *data, libx + } + /* + * virDomainObjEndAPI is called in the shutdown thread, where +- * libxlShutdownThreadInfo and libxl_event are also freed. ++ * libxlEventHandlerThreadInfo and libxl_event are also freed. + */ + return; + } else if (event->type == LIBXL_EVENT_TYPE_DOMAIN_DEATH) { diff --git a/a7a03324-libxl-protect-logger-access.patch b/a7a03324-libxl-protect-logger-access.patch new file mode 100644 index 0000000..2ee943f --- /dev/null +++ b/a7a03324-libxl-protect-logger-access.patch @@ -0,0 +1,84 @@ +commit a7a03324d86e111f81687b5315b8f296dde84340 +Author: Jim Fehlig +Date: Thu Nov 18 12:03:20 2021 -0700 + + libxl: Protect access to libxlLogger files hash table + + The hash table of log file objects in libxlLogger is not protected against + concurrent access. It is possible for one thread to remove an entry while + another is updating it. Add a mutex to the libxlLogger object and lock it + when accessing the files hash table. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_logger.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_logger.c ++++ libvirt-7.10.0/src/libxl/libxl_logger.c +@@ -28,6 +28,7 @@ + #include "util/virfile.h" + #include "util/virhash.h" + #include "util/virstring.h" ++#include "util/virthread.h" + #include "util/virtime.h" + + #define VIR_FROM_THIS VIR_FROM_LIBXL +@@ -43,6 +44,7 @@ struct xentoollog_logger_libvirt { + + /* map storing the opened fds: "domid" -> FILE* */ + GHashTable *files; ++ virMutex tableLock; + FILE *defaultLogFile; + }; + +@@ -85,7 +87,9 @@ libvirt_vmessage(xentoollog_logger *logg + start = start + 9; + *end = '\0'; + ++ virMutexLock(&lg->tableLock); + domainLogFile = virHashLookup(lg->files, start); ++ virMutexUnlock(&lg->tableLock); + if (domainLogFile) + logFile = domainLogFile; + +@@ -158,6 +162,12 @@ libxlLoggerNew(const char *logDir, virLo + return NULL; + } + ++ if (virMutexInit(&logger.tableLock) < 0) { ++ VIR_FORCE_FCLOSE(logger.defaultLogFile); ++ virHashFree(logger.files); ++ return NULL; ++ } ++ + return XTL_NEW_LOGGER(libvirt, logger); + } + +@@ -168,6 +178,7 @@ libxlLoggerFree(libxlLogger *logger) + if (logger->defaultLogFile) + VIR_FORCE_FCLOSE(logger->defaultLogFile); + virHashFree(logger->files); ++ virMutexDestroy(&logger->tableLock); + xtl_logger_destroy(xtl_logger); + } + +@@ -189,7 +200,9 @@ libxlLoggerOpenFile(libxlLogger *logger, + path, g_strerror(errno)); + return; + } ++ virMutexLock(&logger->tableLock); + ignore_value(virHashAddEntry(logger->files, domidstr, logFile)); ++ virMutexUnlock(&logger->tableLock); + + /* domain_config is non NULL only when starting a new domain */ + if (domain_config) { +@@ -204,5 +217,7 @@ libxlLoggerCloseFile(libxlLogger *logger + g_autofree char *domidstr = NULL; + domidstr = g_strdup_printf("%d", id); + ++ virMutexLock(&logger->tableLock); + ignore_value(virHashRemoveEntry(logger->files, domidstr)); ++ virMutexUnlock(&logger->tableLock); + } diff --git a/b9a5faea-libxl-handle-death-thread.patch b/b9a5faea-libxl-handle-death-thread.patch new file mode 100644 index 0000000..90315f1 --- /dev/null +++ b/b9a5faea-libxl-handle-death-thread.patch @@ -0,0 +1,140 @@ +commit b9a5faea49b7412e26d7389af4c32fc2b3ee80e5 +Author: Jim Fehlig +Date: Wed Nov 24 11:36:55 2021 -0700 + + libxl: Handle domain death events in a thread + + Similar to domain shutdown events, processing domain death events can be a + lengthy process and we don't want to block the event handler while the + operation completes. Move the death handling function to a thread. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.c ++++ libvirt-7.10.0/src/libxl/libxl_domain.c +@@ -613,12 +613,17 @@ libxlDomainShutdownThread(void *opaque) + } + + static void +-libxlDomainHandleDeath(libxlDriverPrivate *driver, virDomainObj *vm) ++libxlDomainDeathThread(void *opaque) + { ++ struct libxlEventHandlerThreadInfo *death_info = opaque; ++ virDomainObj *vm = death_info->vm; ++ libxl_event *ev = death_info->event; ++ libxlDriverPrivate *driver = death_info->driver; + virObjectEvent *dom_event = NULL; ++ g_autoptr(libxlDriverConfig) cfg = libxlDriverConfigGet(driver); + + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) +- return; ++ goto cleanup; + + virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_DESTROYED); + dom_event = virDomainEventLifecycleNewFromObj(vm, +@@ -629,6 +634,11 @@ libxlDomainHandleDeath(libxlDriverPrivat + virDomainObjListRemove(driver->domains, vm); + libxlDomainObjEndJob(driver, vm); + virObjectEventStateQueue(driver->domainEventState, dom_event); ++ ++ cleanup: ++ virDomainObjEndAPI(&vm); ++ libxl_event_free(cfg->ctx, ev); ++ VIR_FREE(death_info); + } + + +@@ -642,6 +652,9 @@ libxlDomainEventHandler(void *data, libx + libxl_shutdown_reason xl_reason = event->u.domain_shutdown.shutdown_reason; + virDomainObj *vm = NULL; + g_autoptr(libxlDriverConfig) cfg = NULL; ++ struct libxlEventHandlerThreadInfo *thread_info = NULL; ++ virThread thread; ++ g_autofree char *thread_name = NULL; + + VIR_DEBUG("Received libxl event '%d' for domid '%d'", event->type, event->domid); + +@@ -664,31 +677,27 @@ libxlDomainEventHandler(void *data, libx + goto cleanup; + } + ++ /* ++ * Start event-specific threads to handle shutdown and death. ++ * They are potentially lengthy operations and we don't want to be ++ * blocking this event handler while they are in progress. ++ */ + if (event->type == LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN) { +- struct libxlEventHandlerThreadInfo *shutdown_info = NULL; +- virThread thread; +- g_autofree char *name = NULL; +- +- /* +- * Start a thread to handle shutdown. We don't want to be tying up +- * libxl's event machinery by doing a potentially lengthy shutdown. +- */ +- shutdown_info = g_new0(struct libxlEventHandlerThreadInfo, 1); ++ thread_info = g_new0(struct libxlEventHandlerThreadInfo, 1); + +- shutdown_info->driver = driver; +- shutdown_info->vm = vm; +- shutdown_info->event = (libxl_event *)event; +- name = g_strdup_printf("shutdown-event-%d", event->domid); ++ thread_info->driver = driver; ++ thread_info->vm = vm; ++ thread_info->event = (libxl_event *)event; ++ thread_name = g_strdup_printf("shutdown-event-%d", event->domid); + /* + * Cleanup will be handled by the shutdown thread. + */ + if (virThreadCreateFull(&thread, false, libxlDomainShutdownThread, +- name, false, shutdown_info) < 0) { ++ thread_name, false, thread_info) < 0) { + /* + * Not much we can do on error here except log it. + */ + VIR_ERROR(_("Failed to create thread to handle domain shutdown")); +- VIR_FREE(shutdown_info); + goto cleanup; + } + /* +@@ -697,15 +706,33 @@ libxlDomainEventHandler(void *data, libx + */ + return; + } else if (event->type == LIBXL_EVENT_TYPE_DOMAIN_DEATH) { ++ thread_info = g_new0(struct libxlEventHandlerThreadInfo, 1); ++ ++ thread_info->driver = driver; ++ thread_info->vm = vm; ++ thread_info->event = (libxl_event *)event; ++ thread_name = g_strdup_printf("death-event-%d", event->domid); ++ /* ++ * Cleanup will be handled by the death thread. ++ */ ++ if (virThreadCreateFull(&thread, false, libxlDomainDeathThread, ++ thread_name, false, thread_info) < 0) { ++ /* ++ * Not much we can do on error here except log it. ++ */ ++ VIR_ERROR(_("Failed to create thread to handle domain death")); ++ goto cleanup; ++ } + /* +- * On death the domain is cleaned up from Xen's perspective. +- * Cleanup on the libvirt side can be done synchronously. ++ * virDomainObjEndAPI is called in the death thread, where ++ * libxlEventHandlerThreadInfo and libxl_event are also freed. + */ +- libxlDomainHandleDeath(driver, vm); ++ return; + } + + cleanup: + virDomainObjEndAPI(&vm); ++ VIR_FREE(thread_info); + cfg = libxlDriverConfigGet(driver); + /* Cast away any const */ + libxl_event_free(cfg->ctx, (libxl_event *)event); diff --git a/e4f7589a-libxl-shutdown-thread-name.patch b/e4f7589a-libxl-shutdown-thread-name.patch new file mode 100644 index 0000000..a44b49e --- /dev/null +++ b/e4f7589a-libxl-shutdown-thread-name.patch @@ -0,0 +1,27 @@ +commit e4f7589a3ec285489618ca04c8c0230cc31f3d99 +Author: Jim Fehlig +Date: Wed Nov 24 11:16:38 2021 -0700 + + libxl: Modify name of shutdown thread + + The current thread name 'ev-' is a bit terse. Change the name + to 'shutdown-event-', allowing it to be distinguished between + thread handling other event types. + + Signed-off-by: Jim Fehlig + Reviewed-by: Daniel P. Berrangé + Reviewed-by: Ján Tomko + +Index: libvirt-7.10.0/src/libxl/libxl_domain.c +=================================================================== +--- libvirt-7.10.0.orig/src/libxl/libxl_domain.c ++++ libvirt-7.10.0/src/libxl/libxl_domain.c +@@ -678,7 +678,7 @@ libxlDomainEventHandler(void *data, libx + shutdown_info->driver = driver; + shutdown_info->vm = vm; + shutdown_info->event = (libxl_event *)event; +- name = g_strdup_printf("ev-%d", event->domid); ++ name = g_strdup_printf("shutdown-event-%d", event->domid); + /* + * Cleanup will be handled by the shutdown thread. + */ diff --git a/libvirt-7.10.0.tar.xz b/libvirt-7.10.0.tar.xz new file mode 100644 index 0000000..df28ac9 --- /dev/null +++ b/libvirt-7.10.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb318014af097327928c6e3d72922e3be02a3e6401247b2aa52d9ab8e0b480f9 +size 8798000 diff --git a/libvirt-7.10.0.tar.xz.asc b/libvirt-7.10.0.tar.xz.asc new file mode 100644 index 0000000..a8bb056 --- /dev/null +++ b/libvirt-7.10.0.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEERTtlMQWVVihVRxGZymi+gBAITJwFAmGnRisACgkQymi+gBAI +TJx/DA//SSeuKY/Z/T2UrkaPOGnMR1kYJA9GKcC7XzHQ7exLrz5TbMpROsP1a1cD +K7ys53NHesxs9RHCPj/QpX4eFW4K8h+NiYZyQPO1O/Gu8PWzTdHYFTIFEzpktnsk +qjB/24bJ57QJ8mRnj+n16ch0KmSYzF2qY1WFOOUgyJ21JbL87ULx0TaQ83oq7TdJ +09AJ9dGlUjiOnLXCH54cUto4Ccb2sXxVdqy5UvmzUuA3RIFhGmVbZYdicl2nWrl4 +5lGBOVGcIvjojoj6SLunO149nQqotJ85Z/jOc9OQLYBDgVE+/BPIGsQZcFnCSEDw +MYUab/RMkVky2UeNTXKv4YMXIkYO5FTrIwKfWiWpHhZgN0ZgoDg8BPJLQDi4INPY +nom8u7mpQmNk/UpLNYomMiDpP34xt1XhRwT+jrrSpgyFHJf7BSYn/+qUp0kVEjNY +StLjUufcIGxDM+0dCnSQKVl7zYwvjt9vlD2B9wXnm92xAIIZaVVe3yN3MGC2HCwN +8kSM266ZeP4yPb716GFXhvFhqC0Y1MX48y3IpNtut8O7x4a5qAsSgLIXZ/3Vp8sk +uCN9S7h942NfgoeWbjm3nbeoKUx3iiuvX5B1HVceu+mu4juEcFqCecFmKABSr8Uv +6h4/D84wqGZHHQEhrvvR0Eqq+rFfkKgwZKXhrTZDL/9/weuHscY= +=JMZi +-----END PGP SIGNATURE----- diff --git a/libvirt-7.9.0.tar.xz b/libvirt-7.9.0.tar.xz deleted file mode 100644 index b4dc054..0000000 --- a/libvirt-7.9.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:829cf2b5f574279c40f0446e1168815d3f36b89710560263ca2ce70256f72e8c -size 8785056 diff --git a/libvirt-7.9.0.tar.xz.asc b/libvirt-7.9.0.tar.xz.asc deleted file mode 100644 index 9c4618b..0000000 --- a/libvirt-7.9.0.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEERTtlMQWVVihVRxGZymi+gBAITJwFAmF/3D8ACgkQymi+gBAI -TJxZ0A/+JsPIFw7IojexlMES00ouI7j/Zi0tmmFyCVmkWqy9qWui8lgte9i6AA0r -c8lsOldHxdhyYePPbiiV0J+CFN4h474+Ia/li9P1xMleLrcpM05B6Lhy8rLyW8Yz -VjUk0/iRJm3OOudIRJSEKjVZfxJsPIERMyL3MmVxRQhy3ShUphAiuZkzfsrzfa8D -hhYtJfEpn05oICOmZelkdnmSd+1595MYcseLJHPMIUBxmDaaEiRntT8P8MOOFlHG -YkcMcwdeFtOqUCo732HLS4OdOJF0yaM1nuY7ohrDAlERX6+XCqbJEdHnodwhIfiO -CPKLYMTX292+6EOggT4H0DZ9xxfoC06tT39EKn2uby6ggO3765hcx8rXyzz+3oUx -bC4zGsLHMNDmOg33mg8zGtos6ahUYBJa/acT4BuJ3fFirAXPNIBuGsl3S08jOolb -n/xdNGsC/pg6gPQ0M6BKuxVxIXA4DqBtf5AhKoivjx8AVlohgOX/2872wOJkuMJE -5GrhC09gk5cRvoFmkAo+iJvdqtlGFbzMmruvjc+2d6ud2DRxo1yApQO3IRHAXoL3 -+COpiuGkoGYC8AMlhrgN0Gh+NWkR0Etj0vFUStFkzUmSLk37X+fDEoKPFaNQvf61 -aXxl4gE1/ez6gc/2vA/3jrZjQOHet1G1ezoh3sGEKZiiSkTMRMo= -=PkBb ------END PGP SIGNATURE----- diff --git a/libvirt-power8-models.patch b/libvirt-power8-models.patch index 3ed5212..b9ae4a8 100644 --- a/libvirt-power8-models.patch +++ b/libvirt-power8-models.patch @@ -2,10 +2,10 @@ Add POWER8 v2.0 and v2.1 to cpu map XML From: -Index: libvirt-7.9.0/src/cpu_map/ppc64_POWER8.xml +Index: libvirt-7.10.0/src/cpu_map/ppc64_POWER8.xml =================================================================== ---- libvirt-7.9.0.orig/src/cpu_map/ppc64_POWER8.xml -+++ libvirt-7.9.0/src/cpu_map/ppc64_POWER8.xml +--- libvirt-7.10.0.orig/src/cpu_map/ppc64_POWER8.xml ++++ libvirt-7.10.0/src/cpu_map/ppc64_POWER8.xml @@ -4,5 +4,7 @@ diff --git a/libvirt-suse-netcontrol.patch b/libvirt-suse-netcontrol.patch index 67b4526..67c60d1 100644 --- a/libvirt-suse-netcontrol.patch +++ b/libvirt-suse-netcontrol.patch @@ -1,8 +1,8 @@ -Index: libvirt-7.9.0/tools/virsh.c +Index: libvirt-7.10.0/tools/virsh.c =================================================================== ---- libvirt-7.9.0.orig/tools/virsh.c -+++ libvirt-7.9.0/tools/virsh.c -@@ -546,6 +546,8 @@ virshShowVersion(vshControl *ctl G_GNUC_ +--- libvirt-7.10.0.orig/tools/virsh.c ++++ libvirt-7.10.0/tools/virsh.c +@@ -552,6 +552,8 @@ virshShowVersion(vshControl *ctl G_GNUC_ vshPrint(ctl, " Interface"); # if defined(WITH_NETCF) vshPrint(ctl, " netcf"); @@ -11,10 +11,10 @@ Index: libvirt-7.9.0/tools/virsh.c # elif defined(WITH_UDEV) vshPrint(ctl, " udev"); # endif -Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c +Index: libvirt-7.10.0/src/interface/interface_backend_netcf.c =================================================================== ---- libvirt-7.9.0.orig/src/interface/interface_backend_netcf.c -+++ libvirt-7.9.0/src/interface/interface_backend_netcf.c +--- libvirt-7.10.0.orig/src/interface/interface_backend_netcf.c ++++ libvirt-7.10.0/src/interface/interface_backend_netcf.c @@ -21,7 +21,12 @@ #include @@ -78,7 +78,7 @@ Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c /* open netcf */ if (ncf_init(&driver->netcf, NULL) != 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", -@@ -1110,6 +1150,7 @@ static int netcfInterfaceIsActive(virInt +@@ -1093,6 +1133,7 @@ static int netcfInterfaceIsActive(virInt return ret; } @@ -86,7 +86,7 @@ Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c static int netcfInterfaceChangeBegin(virConnectPtr conn, unsigned int flags) { int ret; -@@ -1184,6 +1225,7 @@ static int netcfInterfaceChangeRollback( +@@ -1167,6 +1208,7 @@ static int netcfInterfaceChangeRollback( virObjectUnlock(driver); return ret; } @@ -94,7 +94,7 @@ Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c static virInterfaceDriver interfaceDriver = { .name = INTERFACE_DRIVER_NAME, -@@ -1200,9 +1242,11 @@ static virInterfaceDriver interfaceDrive +@@ -1183,9 +1225,11 @@ static virInterfaceDriver interfaceDrive .interfaceCreate = netcfInterfaceCreate, /* 0.7.0 */ .interfaceDestroy = netcfInterfaceDestroy, /* 0.7.0 */ .interfaceIsActive = netcfInterfaceIsActive, /* 0.7.3 */ @@ -106,7 +106,7 @@ Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c }; -@@ -1233,6 +1277,19 @@ static virStateDriver interfaceStateDriv +@@ -1216,6 +1260,19 @@ static virStateDriver interfaceStateDriv int netcfIfaceRegister(void) { @@ -126,10 +126,10 @@ Index: libvirt-7.9.0/src/interface/interface_backend_netcf.c if (virRegisterConnectDriver(&interfaceConnectDriver, false) < 0) return -1; if (virSetSharedInterfaceDriver(&interfaceDriver) < 0) -Index: libvirt-7.9.0/src/interface/interface_driver.c +Index: libvirt-7.10.0/src/interface/interface_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/interface/interface_driver.c -+++ libvirt-7.9.0/src/interface/interface_driver.c +--- libvirt-7.10.0.orig/src/interface/interface_driver.c ++++ libvirt-7.10.0/src/interface/interface_driver.c @@ -30,8 +30,15 @@ interfaceRegister(void) if (netcfIfaceRegister() == 0) return 0; @@ -147,11 +147,11 @@ Index: libvirt-7.9.0/src/interface/interface_driver.c if (udevIfaceRegister() == 0) return 0; #endif /* WITH_UDEV */ -Index: libvirt-7.9.0/meson.build +Index: libvirt-7.10.0/meson.build =================================================================== ---- libvirt-7.9.0.orig/meson.build -+++ libvirt-7.9.0/meson.build -@@ -1086,6 +1086,12 @@ else +--- libvirt-7.10.0.orig/meson.build ++++ libvirt-7.10.0/meson.build +@@ -1116,6 +1116,12 @@ else netcf_dep = dependency('', required: false) endif @@ -164,7 +164,7 @@ Index: libvirt-7.9.0/meson.build have_gnu_gettext_tools = false if not get_option('nls').disabled() have_gettext = cc.has_function('gettext') -@@ -1482,10 +1488,10 @@ elif get_option('driver_hyperv').enabled +@@ -1512,10 +1518,10 @@ elif get_option('driver_hyperv').enabled error('openwsman is required for the Hyper-V driver') endif @@ -177,7 +177,7 @@ Index: libvirt-7.9.0/meson.build endif if not get_option('driver_libxl').disabled() and conf.has('WITH_LIBVIRTD') -@@ -2332,6 +2338,7 @@ libs_summary = { +@@ -2352,6 +2358,7 @@ libs_summary = { 'libssh2': libssh2_dep.found(), 'libutil': libutil_dep.found(), 'netcf': conf.has('WITH_NETCF'), @@ -185,10 +185,10 @@ Index: libvirt-7.9.0/meson.build 'NLS': have_gnu_gettext_tools, 'numactl': numactl_dep.found(), 'openwsman': openwsman_dep.found(), -Index: libvirt-7.9.0/src/interface/meson.build +Index: libvirt-7.10.0/src/interface/meson.build =================================================================== ---- libvirt-7.9.0.orig/src/interface/meson.build -+++ libvirt-7.9.0/src/interface/meson.build +--- libvirt-7.10.0.orig/src/interface/meson.build ++++ libvirt-7.10.0/src/interface/meson.build @@ -2,7 +2,7 @@ interface_driver_sources = [ 'interface_driver.c', ] @@ -206,10 +206,10 @@ Index: libvirt-7.9.0/src/interface/meson.build udev_dep, ], 'link_args': [ -Index: libvirt-7.9.0/meson_options.txt +Index: libvirt-7.10.0/meson_options.txt =================================================================== ---- libvirt-7.9.0.orig/meson_options.txt -+++ libvirt-7.9.0/meson_options.txt +--- libvirt-7.10.0.orig/meson_options.txt ++++ libvirt-7.10.0/meson_options.txt @@ -29,6 +29,7 @@ option('libpcap', type: 'feature', value option('libssh', type: 'feature', value: 'auto', description: 'libssh support') option('libssh2', type: 'feature', value: 'auto', description: 'libssh2 support') diff --git a/libvirt.changes b/libvirt.changes index f8ebcc9..2f6b35a 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,23 @@ +------------------------------------------------------------------- +Thu Dec 2 22:36:06 UTC 2021 - James Fehlig + +- libxl: Fix libvirtd deadlocks and segfaults + 23b51d7b-libxl-disable-death-event.patch, + a4e6fba0-libxl-rename-threadinfo-struct.patch, + e4f7589a-libxl-shutdown-thread-name.patch, + b9a5faea-libxl-handle-death-thread.patch, + 5c5df531-libxl-search-domid-in-thread.patch, + a7a03324-libxl-protect-logger-access.patch + bsc#1191668, bsc#1192017 + +------------------------------------------------------------------- +Thu Dec 2 15:12:31 UTC 2021 - James Fehlig + +- Update to libvirt 7.10.0 + - jsc#SLE-18260, jsc#SLE-19264 + - Many incremental improvements and bug fixes, see + https://libvirt.org/news.html#v7-10-0-2021-12-01 + ------------------------------------------------------------------- Fri Nov 19 21:22:27 UTC 2021 - James Fehlig diff --git a/libvirt.spec b/libvirt.spec index ec385ab..11e24fe 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -128,6 +128,10 @@ %define qemu_user qemu %define qemu_group qemu +# Locations for QEMU data +%define qemu_moddir %{_libdir}/qemu +%define qemu_datadir %{_datadir}/qemu + %define _fwdefdir %{_prefix}/lib/firewalld/services %if %{with_wireshark} @@ -136,7 +140,7 @@ Name: libvirt URL: http://libvirt.org/ -Version: 7.9.0 +Version: 7.10.0 Release: 0 Summary: Library providing a virtualization API License: LGPL-2.1-or-later @@ -282,6 +286,12 @@ Source6: libvirtd-relocation-server.xml Source99: baselibs.conf Source100: %{name}-rpmlintrc # Upstream patches +Patch0: 23b51d7b-libxl-disable-death-event.patch +Patch1: a4e6fba0-libxl-rename-threadinfo-struct.patch +Patch2: e4f7589a-libxl-shutdown-thread-name.patch +Patch3: b9a5faea-libxl-handle-death-thread.patch +Patch4: 5c5df531-libxl-search-domid-in-thread.patch +Patch5: a7a03324-libxl-protect-logger-access.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -989,6 +999,8 @@ libvirt plugin for NSS for translating domain names into IP addresses. -Dnss=enabled \ -Dqemu_user=%{qemu_user} \ -Dqemu_group=%{qemu_group} \ + -Dqemu_moddir=%{qemu_moddir} \ + -Dqemu_datadir=%{qemu_datadir} \ %{?arg_loader_nvram} \ -Dlogin_shell=disabled \ -Dinit_script=systemd \ @@ -1025,7 +1037,6 @@ done mkdir -p %{buildroot}/%{_localstatedir}/lib/%{name} mkdir -p %{buildroot}/%{_sysconfdir}/%{name}/hooks %find_lang %{name} -install -d -m 0755 %{buildroot}/%{_localstatedir}/lib/%{name}/dnsmasq/ install -d -m 0755 %{buildroot}/%{_datadir}/%{name}/networks/ cp %{buildroot}/%{_sysconfdir}/%{name}/qemu/networks/default.xml \ %{buildroot}/%{_datadir}/%{name}/networks/default.xml @@ -1737,6 +1748,7 @@ fi %doc %{_mandir}/man1/virt-pki-validate.1* %{_bindir}/virsh %{_bindir}/virt-xml-validate +%{_bindir}/virt-pki-query-dn %{_bindir}/virt-pki-validate %{_datadir}/bash-completion/completions/virsh %dir %{_libdir}/%{name} diff --git a/libxl-dom-reset.patch b/libxl-dom-reset.patch index 5dcd1d6..3b95ef0 100644 --- a/libxl-dom-reset.patch +++ b/libxl-dom-reset.patch @@ -8,11 +8,11 @@ Date: Mon Jun 23 15:51:20 2014 -0600 option, but domainReset can be implemented in the libxl driver by forcibly destroying the domain and starting it again. -Index: libvirt-7.9.0/src/libxl/libxl_driver.c +Index: libvirt-7.10.0/src/libxl/libxl_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_driver.c -+++ libvirt-7.9.0/src/libxl/libxl_driver.c -@@ -1343,6 +1343,63 @@ libxlDomainReboot(virDomainPtr dom, unsi +--- libvirt-7.10.0.orig/src/libxl/libxl_driver.c ++++ libvirt-7.10.0/src/libxl/libxl_driver.c +@@ -1340,6 +1340,63 @@ libxlDomainReboot(virDomainPtr dom, unsi } static int @@ -76,7 +76,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c libxlDomainDestroyFlags(virDomainPtr dom, unsigned int flags) { -@@ -6441,6 +6498,7 @@ static virHypervisorDriver libxlHypervis +@@ -6430,6 +6487,7 @@ static virHypervisorDriver libxlHypervis .domainShutdown = libxlDomainShutdown, /* 0.9.0 */ .domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */ .domainReboot = libxlDomainReboot, /* 0.9.0 */ diff --git a/libxl-set-cach-mode.patch b/libxl-set-cach-mode.patch index d15503f..ce4be30 100644 --- a/libxl-set-cach-mode.patch +++ b/libxl-set-cach-mode.patch @@ -3,10 +3,10 @@ https://bugzilla.novell.com/show_bug.cgi?id=879425 src/libxl/libxl_conf.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) -Index: libvirt-7.9.0/src/libxl/libxl_conf.c +Index: libvirt-7.10.0/src/libxl/libxl_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_conf.c -+++ libvirt-7.9.0/src/libxl/libxl_conf.c +--- libvirt-7.10.0.orig/src/libxl/libxl_conf.c ++++ libvirt-7.10.0/src/libxl/libxl_conf.c @@ -941,6 +941,28 @@ libxlDiskSetDiscard(libxl_device_disk *x } } diff --git a/libxl-set-migration-constraints.patch b/libxl-set-migration-constraints.patch index 6e16bef..5a154a1 100644 --- a/libxl-set-migration-constraints.patch +++ b/libxl-set-migration-constraints.patch @@ -16,11 +16,11 @@ Signed-off-by: Jim Fehlig tools/virsh.pod | 8 ++++++++ 6 files changed, 125 insertions(+), 6 deletions(-) -Index: libvirt-7.9.0/docs/manpages/virsh.rst +Index: libvirt-7.10.0/docs/manpages/virsh.rst =================================================================== ---- libvirt-7.9.0.orig/docs/manpages/virsh.rst -+++ libvirt-7.9.0/docs/manpages/virsh.rst -@@ -3167,7 +3167,8 @@ migrate +--- libvirt-7.10.0.orig/docs/manpages/virsh.rst ++++ libvirt-7.10.0/docs/manpages/virsh.rst +@@ -3175,7 +3175,8 @@ migrate [--postcopy-bandwidth bandwidth] [--parallel [--parallel-connections connections]] [--bandwidth bandwidth] [--tls-destination hostname] @@ -30,7 +30,7 @@ Index: libvirt-7.9.0/docs/manpages/virsh.rst Migrate domain to another host. Add *--live* for live migration; <--p2p> for peer-2-peer migration; *--direct* for direct migration; or *--tunnelled* -@@ -3273,6 +3274,12 @@ parallel connections. The number of such +@@ -3281,6 +3282,12 @@ parallel connections. The number of such network link between the source and the target and thus speeding up the migration. @@ -43,10 +43,10 @@ Index: libvirt-7.9.0/docs/manpages/virsh.rst Running migration can be canceled by interrupting virsh (usually using ``Ctrl-C``) or by ``domjobabort`` command sent from another virsh instance. -Index: libvirt-7.9.0/include/libvirt/libvirt-domain.h +Index: libvirt-7.10.0/include/libvirt/libvirt-domain.h =================================================================== ---- libvirt-7.9.0.orig/include/libvirt/libvirt-domain.h -+++ libvirt-7.9.0/include/libvirt/libvirt-domain.h +--- libvirt-7.10.0.orig/include/libvirt/libvirt-domain.h ++++ libvirt-7.10.0/include/libvirt/libvirt-domain.h @@ -1079,6 +1079,25 @@ typedef enum { */ # define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination" @@ -73,11 +73,11 @@ Index: libvirt-7.9.0/include/libvirt/libvirt-domain.h /* Domain migration. */ virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, unsigned long flags, const char *dname, -Index: libvirt-7.9.0/src/libxl/libxl_driver.c +Index: libvirt-7.10.0/src/libxl/libxl_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_driver.c -+++ libvirt-7.9.0/src/libxl/libxl_driver.c -@@ -6005,6 +6005,9 @@ libxlDomainMigratePerform3Params(virDoma +--- libvirt-7.10.0.orig/src/libxl/libxl_driver.c ++++ libvirt-7.10.0/src/libxl/libxl_driver.c +@@ -5994,6 +5994,9 @@ libxlDomainMigratePerform3Params(virDoma const char *dname = NULL; const char *uri = NULL; int ret = -1; @@ -87,7 +87,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME virReportUnsupportedError(); -@@ -6021,6 +6024,15 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6010,6 +6013,15 @@ libxlDomainMigratePerform3Params(virDoma virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_DEST_NAME, &dname) < 0 || @@ -103,7 +103,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_URI, &uri) < 0) -@@ -6035,11 +6047,11 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6024,11 +6036,11 @@ libxlDomainMigratePerform3Params(virDoma if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml, @@ -117,10 +117,10 @@ Index: libvirt-7.9.0/src/libxl/libxl_driver.c goto cleanup; } -Index: libvirt-7.9.0/src/libxl/libxl_migration.c +Index: libvirt-7.10.0/src/libxl/libxl_migration.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_migration.c -+++ libvirt-7.9.0/src/libxl/libxl_migration.c +--- libvirt-7.10.0.orig/src/libxl/libxl_migration.c ++++ libvirt-7.10.0/src/libxl/libxl_migration.c @@ -334,18 +334,38 @@ libxlMigrateDstReceive(virNetSocket *soc static int libxlDoMigrateSrcSend(libxlDriverPrivate *driver, @@ -162,7 +162,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (ret != 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Failed to send migration data to destination host")); -@@ -887,7 +907,7 @@ struct libxlTunnelControl { +@@ -885,7 +905,7 @@ struct libxlTunnelControl { static int libxlMigrationSrcStartTunnel(libxlDriverPrivate *driver, virDomainObj *vm, @@ -171,7 +171,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c virStreamPtr st, struct libxlTunnelControl **tnl) { -@@ -920,7 +940,7 @@ libxlMigrationSrcStartTunnel(libxlDriver +@@ -918,7 +938,7 @@ libxlMigrationSrcStartTunnel(libxlDriver virObjectUnlock(vm); /* Send data to pipe */ @@ -179,8 +179,8 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c + ret = libxlDoMigrateSrcSend(driver, vm, props, tc->dataFD[1]); virObjectLock(vm); - out: -@@ -956,7 +976,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate + /* libxlMigrationSrcStopTunnel will be called in libxlDoMigrateSrcP2P +@@ -953,7 +973,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate const char *dconnuri G_GNUC_UNUSED, const char *dname, const char *uri, @@ -189,7 +189,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c { virDomainPtr ddomain = NULL; virTypedParameterPtr params = NULL; -@@ -1001,11 +1021,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate +@@ -998,11 +1018,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate /* We don't require the destination to have P2P support * as it looks to be normal migration from the receiver perspective. */ @@ -203,7 +203,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (!(st = virStreamNew(dconn, 0))) goto confirm; ret = dconn->driver->domainMigratePrepareTunnel3Params -@@ -1019,7 +1039,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate +@@ -1016,7 +1036,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate if (ret == -1) goto confirm; @@ -212,7 +212,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (uri_out) { if (virTypedParamsReplaceString(¶ms, &nparams, VIR_MIGRATE_PARAM_URI, uri_out) < 0) { -@@ -1034,11 +1054,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate +@@ -1031,11 +1051,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate } VIR_DEBUG("Perform3 uri=%s", NULLSTR(uri_out)); @@ -227,7 +227,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (ret < 0) { notify_source = false; virErrorPreserveLast(&orig_err); -@@ -1073,7 +1093,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate +@@ -1070,7 +1090,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate confirm: if (notify_source) { VIR_DEBUG("Confirm3 cancelled=%d vm=%p", cancelled, vm); @@ -236,7 +236,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (ret < 0) VIR_WARN("Guest %s probably left in 'paused' state on source", -@@ -1081,7 +1101,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate +@@ -1078,7 +1098,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivate } cleanup: @@ -245,7 +245,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c libxlMigrationSrcStopTunnel(tc); virObjectUnref(st); } -@@ -1125,7 +1145,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD +@@ -1122,7 +1142,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD const char *dconnuri, const char *uri_str G_GNUC_UNUSED, const char *dname, @@ -254,7 +254,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c { int ret = -1; int useParams; -@@ -1162,7 +1182,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD +@@ -1159,7 +1179,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD } ret = libxlDoMigrateSrcP2P(driver, vm, sconn, xmlin, dconn, dconnuri, @@ -263,7 +263,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c if (ret < 0) { /* -@@ -1189,7 +1209,7 @@ libxlDomainMigrationSrcPerform(libxlDriv +@@ -1186,7 +1206,7 @@ libxlDomainMigrationSrcPerform(libxlDriv const char *dconnuri G_GNUC_UNUSED, const char *uri_str, const char *dname G_GNUC_UNUSED, @@ -272,7 +272,7 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c { libxlDomainObjPrivate *priv = vm->privateData; char *hostname = NULL; -@@ -1225,7 +1245,7 @@ libxlDomainMigrationSrcPerform(libxlDriv +@@ -1222,7 +1242,7 @@ libxlDomainMigrationSrcPerform(libxlDriv /* suspend vm and send saved data to dst through socket fd */ virObjectUnlock(vm); @@ -281,10 +281,10 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.c virObjectLock(vm); if (ret == 0) { -Index: libvirt-7.9.0/src/libxl/libxl_migration.h +Index: libvirt-7.10.0/src/libxl/libxl_migration.h =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_migration.h -+++ libvirt-7.9.0/src/libxl/libxl_migration.h +--- libvirt-7.10.0.orig/src/libxl/libxl_migration.h ++++ libvirt-7.10.0/src/libxl/libxl_migration.h @@ -35,6 +35,9 @@ VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING, \ VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING, \ @@ -327,11 +327,11 @@ Index: libvirt-7.9.0/src/libxl/libxl_migration.h virDomainPtr libxlDomainMigrationDstFinish(virConnectPtr dconn, -Index: libvirt-7.9.0/tools/virsh-domain.c +Index: libvirt-7.10.0/tools/virsh-domain.c =================================================================== ---- libvirt-7.9.0.orig/tools/virsh-domain.c -+++ libvirt-7.9.0/tools/virsh-domain.c -@@ -10685,6 +10685,18 @@ static const vshCmdOptDef opts_migrate[] +--- libvirt-7.10.0.orig/tools/virsh-domain.c ++++ libvirt-7.10.0/tools/virsh-domain.c +@@ -10683,6 +10683,18 @@ static const vshCmdOptDef opts_migrate[] .completer = virshCompleteEmpty, .help = N_("override the destination host name used for TLS verification") }, @@ -350,7 +350,7 @@ Index: libvirt-7.9.0/tools/virsh-domain.c {.name = NULL} }; -@@ -10705,6 +10717,7 @@ doMigrate(void *opaque) +@@ -10703,6 +10715,7 @@ doMigrate(void *opaque) unsigned long long ullOpt = 0; int rv; virConnectPtr dconn = data->dconn; @@ -358,7 +358,7 @@ Index: libvirt-7.9.0/tools/virsh-domain.c #ifndef WIN32 sigset_t sigmask, oldsigmask; -@@ -10835,6 +10848,22 @@ doMigrate(void *opaque) +@@ -10833,6 +10846,22 @@ doMigrate(void *opaque) goto save_error; } diff --git a/libxl-support-block-script.patch b/libxl-support-block-script.patch index 77bf3e5..dce8de4 100644 --- a/libxl-support-block-script.patch +++ b/libxl-support-block-script.patch @@ -7,10 +7,10 @@ and npiv. For more details, see bsc#954872 and FATE#319810 -Index: libvirt-7.9.0/src/libxl/libxl_conf.c +Index: libvirt-7.10.0/src/libxl/libxl_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_conf.c -+++ libvirt-7.9.0/src/libxl/libxl_conf.c +--- libvirt-7.10.0.orig/src/libxl/libxl_conf.c ++++ libvirt-7.10.0/src/libxl/libxl_conf.c @@ -942,6 +942,20 @@ libxlDiskSetDiscard(libxl_device_disk *x } diff --git a/lxc-wait-after-eth-del.patch b/lxc-wait-after-eth-del.patch index 0c185bc..4bfab87 100644 --- a/lxc-wait-after-eth-del.patch +++ b/lxc-wait-after-eth-del.patch @@ -13,10 +13,10 @@ device with the same name that is being created. src/lxc/lxc_process.c | 1 + 3 files changed, 4 insertions(+) -Index: libvirt-7.9.0/src/lxc/lxc_controller.c +Index: libvirt-7.10.0/src/lxc/lxc_controller.c =================================================================== ---- libvirt-7.9.0.orig/src/lxc/lxc_controller.c -+++ libvirt-7.9.0/src/lxc/lxc_controller.c +--- libvirt-7.10.0.orig/src/lxc/lxc_controller.c ++++ libvirt-7.10.0/src/lxc/lxc_controller.c @@ -2012,6 +2012,7 @@ static int virLXCControllerDeleteInterfa if (virNetDevVethDelete(ctrl->veths[i]) < 0) ret = -1; @@ -25,10 +25,10 @@ Index: libvirt-7.9.0/src/lxc/lxc_controller.c return ret; } -Index: libvirt-7.9.0/src/lxc/lxc_driver.c +Index: libvirt-7.10.0/src/lxc/lxc_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/lxc/lxc_driver.c -+++ libvirt-7.9.0/src/lxc/lxc_driver.c +--- libvirt-7.10.0.orig/src/lxc/lxc_driver.c ++++ libvirt-7.10.0/src/lxc/lxc_driver.c @@ -67,6 +67,7 @@ #include "virtime.h" #include "virtypedparam.h" @@ -37,7 +37,7 @@ Index: libvirt-7.9.0/src/lxc/lxc_driver.c #include "virstring.h" #include "viraccessapicheck.h" #include "viraccessapichecklxc.h" -@@ -3542,6 +3543,7 @@ lxcDomainAttachDeviceNetLive(virLXCDrive +@@ -3539,6 +3540,7 @@ lxcDomainAttachDeviceNetLive(virLXCDrive case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_ETHERNET: ignore_value(virNetDevVethDelete(veth)); @@ -45,7 +45,7 @@ Index: libvirt-7.9.0/src/lxc/lxc_driver.c break; case VIR_DOMAIN_NET_TYPE_DIRECT: -@@ -3981,6 +3983,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb +@@ -3978,6 +3980,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb virDomainAuditNet(vm, detach, NULL, "detach", false); goto cleanup; } @@ -53,10 +53,10 @@ Index: libvirt-7.9.0/src/lxc/lxc_driver.c break; /* It'd be nice to support this, but with macvlan -Index: libvirt-7.9.0/src/lxc/lxc_process.c +Index: libvirt-7.10.0/src/lxc/lxc_process.c =================================================================== ---- libvirt-7.9.0.orig/src/lxc/lxc_process.c -+++ libvirt-7.9.0/src/lxc/lxc_process.c +--- libvirt-7.10.0.orig/src/lxc/lxc_process.c ++++ libvirt-7.10.0/src/lxc/lxc_process.c @@ -51,6 +51,7 @@ #include "virstring.h" #include "virprocess.h" diff --git a/network-don-t-use-dhcp-authoritative-on-static-netwo.patch b/network-don-t-use-dhcp-authoritative-on-static-netwo.patch index 04d042c..368283a 100644 --- a/network-don-t-use-dhcp-authoritative-on-static-netwo.patch +++ b/network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -17,11 +17,11 @@ Signed-off-by: Martin Wilck tests/networkxml2confdata/dhcp6host-routed-network.conf | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) -Index: libvirt-7.9.0/src/network/bridge_driver.c +Index: libvirt-7.10.0/src/network/bridge_driver.c =================================================================== ---- libvirt-7.9.0.orig/src/network/bridge_driver.c -+++ libvirt-7.9.0/src/network/bridge_driver.c -@@ -1463,7 +1463,14 @@ networkDnsmasqConfContents(virNetworkObj +--- libvirt-7.10.0.orig/src/network/bridge_driver.c ++++ libvirt-7.10.0/src/network/bridge_driver.c +@@ -1449,7 +1449,14 @@ networkDnsmasqConfContents(virNetworkObj if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { if (ipdef->nranges || ipdef->nhosts) { virBufferAddLit(&configbuf, "dhcp-no-override\n"); @@ -37,10 +37,10 @@ Index: libvirt-7.9.0/src/network/bridge_driver.c } if (ipdef->tftproot) { -Index: libvirt-7.9.0/tests/networkxml2confdata/dhcp6host-routed-network.conf +Index: libvirt-7.10.0/tests/networkxml2confdata/dhcp6host-routed-network.conf =================================================================== ---- libvirt-7.9.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf -+++ libvirt-7.9.0/tests/networkxml2confdata/dhcp6host-routed-network.conf +--- libvirt-7.10.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf ++++ libvirt-7.10.0/tests/networkxml2confdata/dhcp6host-routed-network.conf @@ -10,7 +10,6 @@ bind-dynamic interface=virbr1 dhcp-range=192.168.122.1,static diff --git a/ppc64le-canonical-name.patch b/ppc64le-canonical-name.patch index 7127163..c4b299a 100644 --- a/ppc64le-canonical-name.patch +++ b/ppc64le-canonical-name.patch @@ -2,14 +2,14 @@ Canonicalize hostarch name ppc64le to ppc64 See bnc#894956 -Index: libvirt-7.9.0/src/util/virarch.c +Index: libvirt-7.10.0/src/util/virarch.c =================================================================== ---- libvirt-7.9.0.orig/src/util/virarch.c -+++ libvirt-7.9.0/src/util/virarch.c -@@ -220,6 +220,8 @@ virArch virArchFromHost(void) - arch = VIR_ARCH_I686; - } else if (STREQ(ut.machine, "amd64")) { +--- libvirt-7.10.0.orig/src/util/virarch.c ++++ libvirt-7.10.0/src/util/virarch.c +@@ -222,6 +222,8 @@ virArch virArchFromHost(void) arch = VIR_ARCH_X86_64; + } else if (STREQ(ut.machine, "arm64")) { + arch = VIR_ARCH_AARCH64; + } else if (STREQ(ut.machine, "ppc64le")) { + arch = VIR_ARCH_PPC64; } else { diff --git a/qemu-apparmor-screenshot.patch b/qemu-apparmor-screenshot.patch index 15b2325..a25ec14 100644 --- a/qemu-apparmor-screenshot.patch +++ b/qemu-apparmor-screenshot.patch @@ -1,7 +1,7 @@ -Index: libvirt-7.9.0/src/security/apparmor/libvirt-qemu +Index: libvirt-7.10.0/src/security/apparmor/libvirt-qemu =================================================================== ---- libvirt-7.9.0.orig/src/security/apparmor/libvirt-qemu -+++ libvirt-7.9.0/src/security/apparmor/libvirt-qemu +--- libvirt-7.10.0.orig/src/security/apparmor/libvirt-qemu ++++ libvirt-7.10.0/src/security/apparmor/libvirt-qemu @@ -248,3 +248,6 @@ # /sys/bus/nd/devices / r, # harmless on any lsb compliant system diff --git a/suse-libvirt-guests-service.patch b/suse-libvirt-guests-service.patch index 165d137..13418d3 100644 --- a/suse-libvirt-guests-service.patch +++ b/suse-libvirt-guests-service.patch @@ -1,9 +1,9 @@ Adjust libvirt-guests service to conform to SUSE standards -Index: libvirt-7.9.0/tools/libvirt-guests.sh.in +Index: libvirt-7.10.0/tools/libvirt-guests.sh.in =================================================================== ---- libvirt-7.9.0.orig/tools/libvirt-guests.sh.in -+++ libvirt-7.9.0/tools/libvirt-guests.sh.in +--- libvirt-7.10.0.orig/tools/libvirt-guests.sh.in ++++ libvirt-7.10.0/tools/libvirt-guests.sh.in @@ -20,10 +20,6 @@ sysconfdir="@sysconfdir@" localstatedir="@localstatedir@" libvirtd="@sbindir@"/libvirtd diff --git a/suse-libvirtd-disable-tls.patch b/suse-libvirtd-disable-tls.patch index a89d7fe..ee62489 100644 --- a/suse-libvirtd-disable-tls.patch +++ b/suse-libvirtd-disable-tls.patch @@ -3,10 +3,10 @@ Disable TLS by default On SUSE distros, the default is for libvirtd to listen only on the Unix Domain Socket. The libvirt client still provides remote access via a SSH tunnel. -Index: libvirt-7.9.0/src/remote/remote_daemon_config.c +Index: libvirt-7.10.0/src/remote/remote_daemon_config.c =================================================================== ---- libvirt-7.9.0.orig/src/remote/remote_daemon_config.c -+++ libvirt-7.9.0/src/remote/remote_daemon_config.c +--- libvirt-7.10.0.orig/src/remote/remote_daemon_config.c ++++ libvirt-7.10.0/src/remote/remote_daemon_config.c @@ -98,7 +98,7 @@ daemonConfigNew(bool privileged G_GNUC_U #ifdef WITH_IP @@ -16,10 +16,10 @@ Index: libvirt-7.9.0/src/remote/remote_daemon_config.c # else /* ! LIBVIRTD */ data->listen_tls = false; /* Always honoured, --listen doesn't exist. */ # endif /* ! LIBVIRTD */ -Index: libvirt-7.9.0/src/remote/libvirtd.conf.in +Index: libvirt-7.10.0/src/remote/libvirtd.conf.in =================================================================== ---- libvirt-7.9.0.orig/src/remote/libvirtd.conf.in -+++ libvirt-7.9.0/src/remote/libvirtd.conf.in +--- libvirt-7.10.0.orig/src/remote/libvirtd.conf.in ++++ libvirt-7.10.0/src/remote/libvirtd.conf.in @@ -17,8 +17,8 @@ # It is necessary to setup a CA and issue server certificates before # using this capability. @@ -31,10 +31,10 @@ Index: libvirt-7.9.0/src/remote/libvirtd.conf.in # Listen for unencrypted TCP connections on the public TCP/IP port. # NB, must pass the --listen flag to the @DAEMON_NAME@ process for this to -Index: libvirt-7.9.0/src/remote/test_libvirtd.aug.in +Index: libvirt-7.10.0/src/remote/test_libvirtd.aug.in =================================================================== ---- libvirt-7.9.0.orig/src/remote/test_libvirtd.aug.in -+++ libvirt-7.9.0/src/remote/test_libvirtd.aug.in +--- libvirt-7.10.0.orig/src/remote/test_libvirtd.aug.in ++++ libvirt-7.10.0/src/remote/test_libvirtd.aug.in @@ -3,7 +3,7 @@ module Test_@DAEMON_NAME@ = test @DAEMON_NAME_UC@.lns get conf = diff --git a/suse-libxl-disable-autoballoon.patch b/suse-libxl-disable-autoballoon.patch index 70c0938..3589470 100644 --- a/suse-libxl-disable-autoballoon.patch +++ b/suse-libxl-disable-autoballoon.patch @@ -6,10 +6,10 @@ autoballooning. This patch changes libvirt to also disable autoballooning by default. It can only be enabled with the 'autoballoon' setting in libxl.conf. See jsc#SLE-3059 for more details. -Index: libvirt-7.9.0/src/libxl/libxl.conf +Index: libvirt-7.10.0/src/libxl/libxl.conf =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl.conf -+++ libvirt-7.9.0/src/libxl/libxl.conf +--- libvirt-7.10.0.orig/src/libxl/libxl.conf ++++ libvirt-7.10.0/src/libxl/libxl.conf @@ -4,12 +4,11 @@ # Enable autoballooning of domain0 @@ -27,10 +27,10 @@ Index: libvirt-7.9.0/src/libxl/libxl.conf # In order to prevent accidentally starting two domains that -Index: libvirt-7.9.0/src/libxl/libxl_conf.c +Index: libvirt-7.10.0/src/libxl/libxl_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_conf.c -+++ libvirt-7.9.0/src/libxl/libxl_conf.c +--- libvirt-7.10.0.orig/src/libxl/libxl_conf.c ++++ libvirt-7.10.0/src/libxl/libxl_conf.c @@ -1746,15 +1746,12 @@ libxlMakeBuildInfoVfb(virPortAllocatorRa /* * Get domain0 autoballoon configuration. Honor user-specified @@ -66,10 +66,10 @@ Index: libvirt-7.9.0/src/libxl/libxl_conf.c return 0; } -Index: libvirt-7.9.0/src/libxl/test_libvirtd_libxl.aug.in +Index: libvirt-7.10.0/src/libxl/test_libvirtd_libxl.aug.in =================================================================== ---- libvirt-7.9.0.orig/src/libxl/test_libvirtd_libxl.aug.in -+++ libvirt-7.9.0/src/libxl/test_libvirtd_libxl.aug.in +--- libvirt-7.10.0.orig/src/libxl/test_libvirtd_libxl.aug.in ++++ libvirt-7.10.0/src/libxl/test_libvirtd_libxl.aug.in @@ -2,7 +2,7 @@ module Test_libvirtd_libxl = @CONFIG@ diff --git a/suse-qemu-conf.patch b/suse-qemu-conf.patch index eed17be..c36e2ba 100644 --- a/suse-qemu-conf.patch +++ b/suse-qemu-conf.patch @@ -7,10 +7,10 @@ suse-qemu-conf-secdriver.patch, suse-qemu-conf-lockmgr.patch, etc.), but for now they are all lumped together in this single patch. -Index: libvirt-7.9.0/src/qemu/qemu.conf +Index: libvirt-7.10.0/src/qemu/qemu.conf =================================================================== ---- libvirt-7.9.0.orig/src/qemu/qemu.conf -+++ libvirt-7.9.0/src/qemu/qemu.conf +--- libvirt-7.10.0.orig/src/qemu/qemu.conf ++++ libvirt-7.10.0/src/qemu/qemu.conf @@ -491,10 +491,19 @@ # isolation, but it cannot appear in a list of drivers. # @@ -60,10 +60,10 @@ Index: libvirt-7.9.0/src/qemu/qemu.conf # #lock_manager = "lockd" -Index: libvirt-7.9.0/src/qemu/qemu_conf.c +Index: libvirt-7.10.0/src/qemu/qemu_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/qemu/qemu_conf.c -+++ libvirt-7.9.0/src/qemu/qemu_conf.c +--- libvirt-7.10.0.orig/src/qemu/qemu_conf.c ++++ libvirt-7.10.0/src/qemu/qemu_conf.c @@ -272,7 +272,7 @@ virQEMUDriverConfig *virQEMUDriverConfig cfg->slirpHelperName = g_strdup(QEMU_SLIRP_HELPER); cfg->dbusDaemonName = g_strdup(QEMU_DBUS_DAEMON); @@ -73,10 +73,10 @@ Index: libvirt-7.9.0/src/qemu/qemu_conf.c cfg->securityRequireConfined = false; cfg->keepAliveInterval = 5; -Index: libvirt-7.9.0/src/qemu/test_libvirtd_qemu.aug.in +Index: libvirt-7.10.0/src/qemu/test_libvirtd_qemu.aug.in =================================================================== ---- libvirt-7.9.0.orig/src/qemu/test_libvirtd_qemu.aug.in -+++ libvirt-7.9.0/src/qemu/test_libvirtd_qemu.aug.in +--- libvirt-7.10.0.orig/src/qemu/test_libvirtd_qemu.aug.in ++++ libvirt-7.10.0/src/qemu/test_libvirtd_qemu.aug.in @@ -45,6 +45,7 @@ module Test_libvirtd_qemu = { "remote_websocket_port_min" = "5700" } { "remote_websocket_port_max" = "65535" } diff --git a/suse-qemu-ovmf-paths.patch b/suse-qemu-ovmf-paths.patch index 721028e..abcdffb 100644 --- a/suse-qemu-ovmf-paths.patch +++ b/suse-qemu-ovmf-paths.patch @@ -5,10 +5,10 @@ advertised and used by libvirt are automatically detected. Until upstream removes the old DEFAULT_LOADER_NVRAM approach and associated code, this patch will stay. -Index: libvirt-7.9.0/src/qemu/qemu.conf +Index: libvirt-7.10.0/src/qemu/qemu.conf =================================================================== ---- libvirt-7.9.0.orig/src/qemu/qemu.conf -+++ libvirt-7.9.0/src/qemu/qemu.conf +--- libvirt-7.10.0.orig/src/qemu/qemu.conf ++++ libvirt-7.10.0/src/qemu/qemu.conf @@ -857,10 +857,9 @@ # for x86_64 and i686, but it's AAVMF for aarch64. The libvirt default # follows this scheme. @@ -23,10 +23,10 @@ Index: libvirt-7.9.0/src/qemu/qemu.conf #] # The backend to use for handling stdout/stderr output from -Index: libvirt-7.9.0/src/qemu/qemu_conf.c +Index: libvirt-7.10.0/src/qemu/qemu_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/qemu/qemu_conf.c -+++ libvirt-7.9.0/src/qemu/qemu_conf.c +--- libvirt-7.10.0.orig/src/qemu/qemu_conf.c ++++ libvirt-7.10.0/src/qemu/qemu_conf.c @@ -98,10 +98,9 @@ qemuDriverUnlock(virQEMUDriver *driver) #ifndef DEFAULT_LOADER_NVRAM @@ -41,10 +41,10 @@ Index: libvirt-7.9.0/src/qemu/qemu_conf.c #endif -Index: libvirt-7.9.0/src/security/virt-aa-helper.c +Index: libvirt-7.10.0/src/security/virt-aa-helper.c =================================================================== ---- libvirt-7.9.0.orig/src/security/virt-aa-helper.c -+++ libvirt-7.9.0/src/security/virt-aa-helper.c +--- libvirt-7.10.0.orig/src/security/virt-aa-helper.c ++++ libvirt-7.10.0/src/security/virt-aa-helper.c @@ -480,7 +480,8 @@ valid_path(const char *path, const bool "/usr/share/ovmf/", /* for OVMF images */ "/usr/share/AAVMF/", /* for AAVMF images */ @@ -55,10 +55,10 @@ Index: libvirt-7.9.0/src/security/virt-aa-helper.c }; /* override the above with these */ const char * const override[] = { -Index: libvirt-7.9.0/src/qemu/test_libvirtd_qemu.aug.in +Index: libvirt-7.10.0/src/qemu/test_libvirtd_qemu.aug.in =================================================================== ---- libvirt-7.9.0.orig/src/qemu/test_libvirtd_qemu.aug.in -+++ libvirt-7.9.0/src/qemu/test_libvirtd_qemu.aug.in +--- libvirt-7.10.0.orig/src/qemu/test_libvirtd_qemu.aug.in ++++ libvirt-7.10.0/src/qemu/test_libvirtd_qemu.aug.in @@ -96,10 +96,9 @@ module Test_libvirtd_qemu = { "migration_port_max" = "49215" } { "log_timestamp" = "0" } diff --git a/suse-xen-ovmf-paths.patch b/suse-xen-ovmf-paths.patch index fa0e4c0..974240a 100644 --- a/suse-xen-ovmf-paths.patch +++ b/suse-xen-ovmf-paths.patch @@ -5,10 +5,10 @@ June 2021 ovmf only supports one firmware for Xen. This patch adjusts the firmware path to match the one provided by the ovmf package. -Index: libvirt-7.9.0/src/libxl/libxl_conf.c +Index: libvirt-7.10.0/src/libxl/libxl_conf.c =================================================================== ---- libvirt-7.9.0.orig/src/libxl/libxl_conf.c -+++ libvirt-7.9.0/src/libxl/libxl_conf.c +--- libvirt-7.10.0.orig/src/libxl/libxl_conf.c ++++ libvirt-7.10.0/src/libxl/libxl_conf.c @@ -1797,7 +1797,7 @@ libxlDriverConfigNew(void) cfg->firmwares = g_new0(virFirmware *, 1); cfg->nfirmwares = 1; diff --git a/virt-create-rootfs.patch b/virt-create-rootfs.patch index 39f9af2..48aa5e8 100644 --- a/virt-create-rootfs.patch +++ b/virt-create-rootfs.patch @@ -1,7 +1,7 @@ -Index: libvirt-7.9.0/tools/virt-create-rootfs +Index: libvirt-7.10.0/tools/virt-create-rootfs =================================================================== --- /dev/null -+++ libvirt-7.9.0/tools/virt-create-rootfs ++++ libvirt-7.10.0/tools/virt-create-rootfs @@ -0,0 +1,236 @@ +#!/bin/sh +set -e @@ -239,10 +239,10 @@ Index: libvirt-7.9.0/tools/virt-create-rootfs + echo "pts/0" >> "$ROOT/etc/securetty" + chroot "$ROOT" /usr/bin/passwd +fi -Index: libvirt-7.9.0/docs/manpages/virt-create-rootfs.rst +Index: libvirt-7.10.0/docs/manpages/virt-create-rootfs.rst =================================================================== --- /dev/null -+++ libvirt-7.9.0/docs/manpages/virt-create-rootfs.rst ++++ libvirt-7.10.0/docs/manpages/virt-create-rootfs.rst @@ -0,0 +1,88 @@ +================== +virt-create-rootfs @@ -332,10 +332,10 @@ Index: libvirt-7.9.0/docs/manpages/virt-create-rootfs.rst +======== + +virsh(1), `https://libvirt.org/ `_ -Index: libvirt-7.9.0/docs/manpages/meson.build +Index: libvirt-7.10.0/docs/manpages/meson.build =================================================================== ---- libvirt-7.9.0.orig/docs/manpages/meson.build -+++ libvirt-7.9.0/docs/manpages/meson.build +--- libvirt-7.10.0.orig/docs/manpages/meson.build ++++ libvirt-7.10.0/docs/manpages/meson.build @@ -19,6 +19,7 @@ docs_man_files = [ { 'name': 'virt-pki-validate', 'section': '1', 'install': true }, { 'name': 'virt-qemu-run', 'section': '1', 'install': conf.has('WITH_QEMU') }, @@ -344,10 +344,10 @@ Index: libvirt-7.9.0/docs/manpages/meson.build { 'name': 'libvirtd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') }, { 'name': 'virt-sanlock-cleanup', 'section': '8', 'install': conf.has('WITH_SANLOCK') }, -Index: libvirt-7.9.0/tools/meson.build +Index: libvirt-7.10.0/tools/meson.build =================================================================== ---- libvirt-7.9.0.orig/tools/meson.build -+++ libvirt-7.9.0/tools/meson.build +--- libvirt-7.10.0.orig/tools/meson.build ++++ libvirt-7.10.0/tools/meson.build @@ -154,6 +154,8 @@ else virsh_icon_res = [] endif