SHA256
1
0
forked from pool/libvirt

Accepting request 935300 from Virtualization

OBS-URL: https://build.opensuse.org/request/show/935300
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libvirt?expand=0&rev=344
This commit is contained in:
Dominique Leuenberger 2021-12-06 22:59:04 +00:00 committed by Git OBS Bridge
commit 06d4c4073f
32 changed files with 839 additions and 221 deletions

View File

@ -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',

View File

@ -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;

View File

@ -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 */

View File

@ -0,0 +1,105 @@
commit 23b51d7b8ec885e97a9277cf0a6c2833db4636e8
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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;

View File

@ -0,0 +1,167 @@
commit 5c5df5310f72be4878a71ace47074c54e0d1a27d
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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 */

View File

@ -0,0 +1,63 @@
commit a4e6fba069c0809b8b5dde5e9db62d2efd91b4a0
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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) {

View File

@ -0,0 +1,84 @@
commit a7a03324d86e111f81687b5315b8f296dde84340
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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);
}

View File

@ -0,0 +1,140 @@
commit b9a5faea49b7412e26d7389af4c32fc2b3ee80e5
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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);

View File

@ -0,0 +1,27 @@
commit e4f7589a3ec285489618ca04c8c0230cc31f3d99
Author: Jim Fehlig <jfehlig@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 <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@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.
*/

3
libvirt-7.10.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cb318014af097327928c6e3d72922e3be02a3e6401247b2aa52d9ab8e0b480f9
size 8798000

16
libvirt-7.10.0.tar.xz.asc Normal file
View File

@ -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-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:829cf2b5f574279c40f0446e1168815d3f36b89710560263ca2ce70256f72e8c
size 8785056

View File

@ -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-----

View File

@ -2,10 +2,10 @@ Add POWER8 v2.0 and v2.1 to cpu map XML
From: <ro@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'/>

View File

@ -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 <config.h>
@ -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')

View File

@ -1,3 +1,23 @@
-------------------------------------------------------------------
Thu Dec 2 22:36:06 UTC 2021 - James Fehlig <jfehlig@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 <jfehlig@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
-------------------------------------------------------------------
Fri Nov 19 21:22:27 UTC 2021 - James Fehlig <jfehlig@suse.com>

View File

@ -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}

View File

@ -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 */

View File

@ -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
}
}

View File

@ -16,11 +16,11 @@ Signed-off-by: Jim Fehlig <jfehlig@suse.com>
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(&params, &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;
}

View File

@ -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
}

View File

@ -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"

View File

@ -17,11 +17,11 @@ Signed-off-by: Martin Wilck <mwilck@suse.com>
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

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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 =

View File

@ -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@

View File

@ -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" }

View File

@ -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" }

View File

@ -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;

View File

@ -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/ <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