Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libvirt for openSUSE:Factory checked in at 2021-12-06 23:59:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libvirt (Old) and /work/SRC/openSUSE:Factory/.libvirt.new.31177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt" Mon Dec 6 23:59:04 2021 rev:344 rq:935300 version:7.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libvirt/libvirt.changes 2021-11-22 23:04:17.965908803 +0100 +++ /work/SRC/openSUSE:Factory/.libvirt.new.31177/libvirt.changes 2021-12-06 23:59:09.060613461 +0100 @@ -1,0 +2,20 @@ +Thu Dec 2 22:36:06 UTC 2021 - James Fehlig <jfeh...@suse.com> + +- 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 <jfeh...@suse.com> + +- 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 + +------------------------------------------------------------------- Old: ---- libvirt-7.9.0.tar.xz libvirt-7.9.0.tar.xz.asc New: ---- 23b51d7b-libxl-disable-death-event.patch 5c5df531-libxl-search-domid-in-thread.patch a4e6fba0-libxl-rename-threadinfo-struct.patch a7a03324-libxl-protect-logger-access.patch b9a5faea-libxl-handle-death-thread.patch e4f7589a-libxl-shutdown-thread-name.patch libvirt-7.10.0.tar.xz libvirt-7.10.0.tar.xz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libvirt.spec ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.716607604 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.720607590 +0100 @@ -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 @@ 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 @@ -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 @@ 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 @@ %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} ++++++ 0001-Extract-stats-functions-from-the-qemu-driver.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.772607406 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.776607392 +0100 @@ -18,10 +18,10 @@ 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 @@ +} + +#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 @@ + 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 @@ # conf/domain_validate.h virDomainActualNetDefValidate; virDomainDefValidate; -@@ -1944,6 +1949,7 @@ virCgroupGetMemoryUsage; +@@ -1950,6 +1955,7 @@ virCgroupGetMemoryUsage; virCgroupGetMemSwapHardLimit; virCgroupGetMemSwapUsage; virCgroupGetPercpuStats; @@ -229,10 +229,10 @@ 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 @@ #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 @@ } -@@ -17882,25 +17877,11 @@ qemuDomainGetStatsCpuCgroup(virDomainObj +@@ -17828,25 +17823,11 @@ qemuDomainGetStatsCpuCgroup(virDomainObj virTypedParamList *params) { qemuDomainObjPrivate *priv = dom->privateData; @@ -283,7 +283,7 @@ } static int -@@ -18093,76 +18074,15 @@ qemuDomainGetStatsVcpu(virQEMUDriver *dr +@@ -18039,76 +18020,15 @@ qemuDomainGetStatsVcpu(virQEMUDriver *dr return ret; } @@ -361,11 +361,11 @@ /* 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 @@ #else /* !__linux__ */ bool -@@ -3045,6 +3070,14 @@ virCgroupAvailable(void) +@@ -3042,6 +3067,14 @@ virCgroupAvailable(void) } @@ -412,10 +412,10 @@ 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 @@ + 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', ++++++ 0001-libxl-add-support-for-BlockResize-API.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.784607364 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.784607364 +0100 @@ -19,11 +19,11 @@ 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 @@ 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 @@ .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; ++++++ 0002-lxc-implement-connectGetAllDomainStats.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.792607335 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.796607321 +0100 @@ -9,10 +9,10 @@ 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 @@ #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 @@ /* 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 */ ++++++ 23b51d7b-libxl-disable-death-event.patch ++++++ commit 23b51d7b8ec885e97a9277cf0a6c2833db4636e8 Author: Jim Fehlig <jfeh...@suse.com> 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 <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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; ++++++ 5c5df531-libxl-search-domid-in-thread.patch ++++++ commit 5c5df5310f72be4878a71ace47074c54e0d1a27d Author: Jim Fehlig <jfeh...@suse.com> 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=<optimized out>) at ../../src/util/virthread.c:79 #3 0x00007f3189463f3b in virObjectLock (anyobj=<optimized out>) at ../../src/util/virobject.c:433 #4 0x00007f31894f2f41 in virDomainObjListSearchID (payload=0x7f317400a6d0, name=<optimized out>, data=0x7f31411eaeac) at ../../src/conf/virdomainobjlist.c:105 #5 0x00007f3189437ac5 in virHashSearch (ctable=0x7f3124025a30, iter=iter@entry=0x7f31894f2f30 <virDomainObjListSearchID>, data=data@entry=0x7f31411eaeac, name=name@entry=0x0) at ../../src/util/virhash.c:745 #6 0x00007f31894f3919 in virDomainObjListFindByID (doms=0x7f3124025430, id=<optimized out>) 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=<optimized out>, ao_how=ao_how@entry=0x0) at libxl_domain.c:730 #12 0x00007f3152f2a584 in libxl_domain_unpause_0x041200 (domid=<optimized out>, ctx=<optimized out>) 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=<optimized out>, 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=<optimized out>) at ../../src/libxl/libxl_domain.c:559 #17 0x00007f3189487ee2 in virThreadHelper (data=<optimized out>) 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 <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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 */ ++++++ a4e6fba0-libxl-rename-threadinfo-struct.patch ++++++ commit a4e6fba069c0809b8b5dde5e9db62d2efd91b4a0 Author: Jim Fehlig <jfeh...@suse.com> 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 <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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) { ++++++ a7a03324-libxl-protect-logger-access.patch ++++++ commit a7a03324d86e111f81687b5315b8f296dde84340 Author: Jim Fehlig <jfeh...@suse.com> 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 <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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); } ++++++ b9a5faea-libxl-handle-death-thread.patch ++++++ commit b9a5faea49b7412e26d7389af4c32fc2b3ee80e5 Author: Jim Fehlig <jfeh...@suse.com> 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 <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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); ++++++ e4f7589a-libxl-shutdown-thread-name.patch ++++++ commit e4f7589a3ec285489618ca04c8c0230cc31f3d99 Author: Jim Fehlig <jfeh...@suse.com> Date: Wed Nov 24 11:16:38 2021 -0700 libxl: Modify name of shutdown thread The current thread name 'ev-<domid>' is a bit terse. Change the name to 'shutdown-event-<domid>', allowing it to be distinguished between thread handling other event types. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: Daniel P. Berrang?? <berra...@redhat.com> Reviewed-by: J??n Tomko <jto...@redhat.com> 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. */ ++++++ libvirt-7.9.0.tar.xz -> libvirt-7.10.0.tar.xz ++++++ /work/SRC/openSUSE:Factory/libvirt/libvirt-7.9.0.tar.xz /work/SRC/openSUSE:Factory/.libvirt.new.31177/libvirt-7.10.0.tar.xz differ: char 26, line 1 ++++++ libvirt-power8-models.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.888606996 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.888606996 +0100 @@ -2,10 +2,10 @@ From: <r...@suse.de> -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 @@ <pvr value='0x004b0000' mask='0xffff0000'/> <pvr value='0x004c0000' mask='0xffff0000'/> ++++++ libvirt-suse-netcontrol.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.924606868 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.924606868 +0100 @@ -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 @@ # 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 <config.h> @@ -78,7 +78,7 @@ /* 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 @@ 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 @@ 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 @@ }; -@@ -1233,6 +1277,19 @@ static virStateDriver interfaceStateDriv +@@ -1216,6 +1260,19 @@ static virStateDriver interfaceStateDriv int netcfIfaceRegister(void) { @@ -126,10 +126,10 @@ 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 @@ 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 @@ 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 @@ 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 @@ '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 @@ 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') ++++++ libxl-dom-reset.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.972606699 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.976606685 +0100 @@ -8,11 +8,11 @@ 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 @@ 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 */ ++++++ libxl-set-cach-mode.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:10.992606628 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:10.992606628 +0100 @@ -3,10 +3,10 @@ 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 } } ++++++ libxl-set-migration-constraints.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.000606600 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.000606600 +0100 @@ -16,11 +16,11 @@ 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 @@ 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 @@ 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 @@ /* 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 @@ #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 @@ 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 @@ 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 @@ 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 @@ 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 @@ + 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 @@ { 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ { 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 @@ 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 @@ { 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 @@ 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 @@ 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 @@ {.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 @@ #ifndef WIN32 sigset_t sigmask, oldsigmask; -@@ -10835,6 +10848,22 @@ doMigrate(void *opaque) +@@ -10833,6 +10846,22 @@ doMigrate(void *opaque) goto save_error; } ++++++ libxl-support-block-script.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.008606571 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.008606571 +0100 @@ -7,10 +7,10 @@ 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 } ++++++ lxc-wait-after-eth-del.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.016606543 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.016606543 +0100 @@ -13,10 +13,10 @@ 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 @@ 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 @@ #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 @@ 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 @@ 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" ++++++ network-don-t-use-dhcp-authoritative-on-static-netwo.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.024606515 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.024606515 +0100 @@ -17,11 +17,11 @@ 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 @@ } 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 ++++++ ppc64le-canonical-name.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.036606473 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.036606473 +0100 @@ -2,14 +2,14 @@ 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 { ++++++ qemu-apparmor-screenshot.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.052606416 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.056606402 +0100 @@ -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 ++++++ suse-libvirt-guests-service.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.068606359 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.072606345 +0100 @@ -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 ++++++ suse-libvirtd-disable-tls.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.096606261 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.096606261 +0100 @@ -3,10 +3,10 @@ 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 @@ # 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 @@ # 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 = ++++++ suse-libxl-disable-autoballoon.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.108606218 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.108606218 +0100 @@ -6,10 +6,10 @@ 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 @@ # 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 @@ 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@ ++++++ suse-qemu-conf.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.116606189 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.116606189 +0100 @@ -7,10 +7,10 @@ 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 @@ # #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 @@ 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" } ++++++ suse-qemu-ovmf-paths.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.136606119 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.136606119 +0100 @@ -5,10 +5,10 @@ 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 @@ #] # 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 @@ #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 @@ }; /* 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" } ++++++ suse-xen-ovmf-paths.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.144606091 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.148606076 +0100 @@ -5,10 +5,10 @@ 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; ++++++ virt-create-rootfs.patch ++++++ --- /var/tmp/diff_new_pack.4ahbgN/_old 2021-12-06 23:59:11.156606048 +0100 +++ /var/tmp/diff_new_pack.4ahbgN/_new 2021-12-06 23:59:11.156606048 +0100 @@ -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 @@ + 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 @@ +======== + +virsh(1), `https://libvirt.org/ <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 @@ { '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