[PATCH 0/7] qemu: Remove unused code for tuning migration parameters
by Peter Krempa
All qemu versions supported by libvirt allow setting everything via
migration parameters which is also the preferred code path in libvirt.
Remove the legacy code.
Peter Krempa (7):
qemu: Always assume support for QEMU_CAPS_MIGRATION_PARAM_BANDWIDTH
qemu: capabilities: Retire QEMU_CAPS_MIGRATION_PARAM_BANDWIDTH
qemu: driver: Always assume support for
QEMU_CAPS_MIGRATION_PARAM_DOWNTIME
qemu: capabilties: Retire QEMU_CAPS_MIGRATION_PARAM_DOWNTIME
qemu: Always assume support for
QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE
qemu: capabilities: Retire QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE
qemu: monitor: Remove unused migration property getters/setters
src/qemu/qemu_capabilities.c | 9 +-
src/qemu/qemu_capabilities.h | 6 +-
src/qemu/qemu_driver.c | 125 ++++++------------
src/qemu/qemu_migration.c | 53 +++-----
src/qemu/qemu_migration_params.c | 18 ---
src/qemu/qemu_monitor.c | 55 --------
src/qemu/qemu_monitor.h | 11 --
src/qemu/qemu_monitor_json.c | 96 --------------
src/qemu/qemu_monitor_json.h | 15 ---
.../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 3 -
.../caps_3.1.0.x86_64.xml | 3 -
.../caps_4.0.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 3 -
.../caps_4.0.0.riscv32.xml | 3 -
.../caps_4.0.0.riscv64.xml | 3 -
.../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 3 -
.../caps_4.0.0.x86_64.xml | 3 -
.../caps_4.1.0.x86_64.xml | 3 -
.../caps_4.2.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 3 -
.../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 3 -
.../caps_4.2.0.x86_64.xml | 3 -
.../caps_5.0.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 3 -
.../caps_5.0.0.riscv64.xml | 3 -
.../caps_5.0.0.x86_64.xml | 3 -
.../qemucapabilitiesdata/caps_5.1.0.sparc.xml | 3 -
.../caps_5.1.0.x86_64.xml | 3 -
.../caps_5.2.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 3 -
.../caps_5.2.0.riscv64.xml | 3 -
.../qemucapabilitiesdata/caps_5.2.0.s390x.xml | 3 -
.../caps_5.2.0.x86_64.xml | 3 -
.../caps_6.0.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_6.0.0.s390x.xml | 3 -
.../caps_6.0.0.x86_64.xml | 3 -
.../caps_6.1.0.x86_64.xml | 3 -
.../caps_6.2.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_6.2.0.ppc64.xml | 3 -
.../caps_6.2.0.x86_64.xml | 3 -
.../caps_7.0.0.aarch64.xml | 3 -
.../qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 3 -
.../caps_7.0.0.x86_64.xml | 3 -
.../caps_7.1.0.x86_64.xml | 3 -
tests/qemumonitorjsontest.c | 39 ------
45 files changed, 59 insertions(+), 473 deletions(-)
--
2.36.1
2 years, 5 months
[libvirt PATCH] util: remove virObjectUnref() adapters
by Jonathon Jongsma
These wrapper functions were used to adapt the virObjectUnref() function
signature for different callbacks. But in commit 0d184072, the
virObjectUnref() function was changed to return a void instead of a
bool, so these adapters are no longer necessary.
Signed-off-by: Jonathon Jongsma <jjongsma(a)redhat.com>
---
src/admin/admin_remote.c | 4 ++--
src/bhyve/bhyve_monitor.c | 2 +-
src/conf/object_event.c | 2 +-
src/conf/virdomainobjlist.c | 8 ++++----
src/conf/virinterfaceobj.c | 2 +-
src/conf/virnetworkobj.c | 2 +-
src/conf/virnodedeviceobj.c | 2 +-
src/conf/virnwfilterbindingobjlist.c | 4 ++--
src/conf/virsecretobj.c | 2 +-
src/conf/virstorageobj.c | 10 +++++-----
src/libvirt_private.syms | 2 --
src/qemu/qemu_domain.c | 2 +-
src/remote/remote_daemon_stream.c | 2 +-
src/remote/remote_driver.c | 8 ++++----
src/rpc/gendispatch.pl | 2 +-
src/rpc/virkeepalive.c | 2 +-
src/rpc/virnetclient.c | 4 ++--
src/rpc/virnetclientstream.c | 2 +-
src/rpc/virnetdaemon.c | 2 +-
src/rpc/virnetserverclient.c | 4 ++--
src/rpc/virnetserverservice.c | 6 +++---
src/util/virobject.c | 30 ----------------------------
src/util/virobject.h | 6 ------
tests/qemustatusxml2xmltest.c | 2 +-
tests/qemuxml2argvtest.c | 2 +-
tests/qemuxml2xmltest.c | 2 +-
tools/virsh-console.c | 6 +++---
27 files changed, 42 insertions(+), 80 deletions(-)
diff --git a/src/admin/admin_remote.c b/src/admin/admin_remote.c
index 83a6be2b97..012488bff3 100644
--- a/src/admin/admin_remote.c
+++ b/src/admin/admin_remote.c
@@ -165,7 +165,7 @@ remoteAdminConnectOpen(virAdmConnectPtr conn, unsigned int flags)
virObjectRef(conn->closeCallback);
virNetClientSetCloseCallback(priv->client, remoteAdminClientCloseFunc,
conn->closeCallback,
- virObjectFreeCallback);
+ virObjectUnref);
if (call(conn, 0, ADMIN_PROC_CONNECT_OPEN,
(xdrproc_t)xdr_admin_connect_open_args, (char *)&args,
@@ -195,7 +195,7 @@ remoteAdminConnectClose(virAdmConnectPtr conn)
}
virNetClientSetCloseCallback(priv->client, NULL, conn->closeCallback,
- virObjectFreeCallback);
+ virObjectUnref);
virNetClientClose(priv->client);
rv = 0;
diff --git a/src/bhyve/bhyve_monitor.c b/src/bhyve/bhyve_monitor.c
index 6788b83c70..ae602b5c39 100644
--- a/src/bhyve/bhyve_monitor.c
+++ b/src/bhyve/bhyve_monitor.c
@@ -82,7 +82,7 @@ bhyveMonitorRegister(bhyveMonitor *mon)
VIR_EVENT_HANDLE_HANGUP,
bhyveMonitorIO,
mon,
- virObjectFreeCallback);
+ virObjectUnref);
if (mon->watch < 0) {
VIR_DEBUG("failed to add event handle for mon %p", mon);
virObjectUnref(mon);
diff --git a/src/conf/object_event.c b/src/conf/object_event.c
index 3c998eda7f..62bbfb33bc 100644
--- a/src/conf/object_event.c
+++ b/src/conf/object_event.c
@@ -876,7 +876,7 @@ virObjectEventStateRegisterID(virConnectPtr conn,
if ((state->timer = virEventAddTimeout(-1,
virObjectEventTimer,
state,
- virObjectFreeCallback)) < 0) {
+ virObjectUnref)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("could not initialize domain event timer"));
goto cleanup;
diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c
index f16b963eb0..2569454ff8 100644
--- a/src/conf/virdomainobjlist.c
+++ b/src/conf/virdomainobjlist.c
@@ -73,8 +73,8 @@ virDomainObjList *virDomainObjListNew(void)
if (!(doms = virObjectRWLockableNew(virDomainObjListClass)))
return NULL;
- doms->objs = virHashNew(virObjectFreeHashData);
- doms->objsName = virHashNew(virObjectFreeHashData);
+ doms->objs = virHashNew(virObjectUnref);
+ doms->objsName = virHashNew(virObjectUnref);
return doms;
}
@@ -217,7 +217,7 @@ virDomainObjListFindByName(virDomainObjList *doms,
* tables. Once successfully added into a table, increase the
* reference count since upon removal in virHashRemoveEntry
* the virObjectUnref will be called since the hash tables were
- * configured to call virObjectFreeHashData when the object is
+ * configured to call virObjectUnref when the object is
* removed from the hash table.
*
* Returns 0 on success with 3 references and locked
@@ -453,7 +453,7 @@ virDomainObjListRename(virDomainObjList *doms,
/* Increment the refcnt for @new_name. We're about to remove
* the @old_name which will cause the refcnt to be decremented
- * via the virObjectUnref call made during the virObjectFreeHashData
+ * via the virObjectUnref call made during the virObjectUnref
* as a result of removing something from the object list hash
* table as set up during virDomainObjListNew. */
virObjectRef(dom);
diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c
index c2b81b984f..1ec1c9d1b7 100644
--- a/src/conf/virinterfaceobj.c
+++ b/src/conf/virinterfaceobj.c
@@ -140,7 +140,7 @@ virInterfaceObjListNew(void)
if (!(interfaces = virObjectRWLockableNew(virInterfaceObjListClass)))
return NULL;
- interfaces->objsName = virHashNew(virObjectFreeHashData);
+ interfaces->objsName = virHashNew(virObjectUnref);
return interfaces;
}
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index ddb325cdbd..46b499db58 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -326,7 +326,7 @@ virNetworkObjListNew(void)
if (!(nets = virObjectRWLockableNew(virNetworkObjListClass)))
return NULL;
- nets->objs = virHashNew(virObjectFreeHashData);
+ nets->objs = virHashNew(virObjectUnref);
return nets;
}
diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
index 26498fc498..4c22484d11 100644
--- a/src/conf/virnodedeviceobj.c
+++ b/src/conf/virnodedeviceobj.c
@@ -465,7 +465,7 @@ virNodeDeviceObjListNew(void)
if (!(devs = virObjectRWLockableNew(virNodeDeviceObjListClass)))
return NULL;
- devs->objs = virHashNew(virObjectFreeHashData);
+ devs->objs = virHashNew(virObjectUnref);
return devs;
}
diff --git a/src/conf/virnwfilterbindingobjlist.c b/src/conf/virnwfilterbindingobjlist.c
index 53713d815a..9a46fa06b9 100644
--- a/src/conf/virnwfilterbindingobjlist.c
+++ b/src/conf/virnwfilterbindingobjlist.c
@@ -66,7 +66,7 @@ virNWFilterBindingObjListNew(void)
if (!(bindings = virObjectRWLockableNew(virNWFilterBindingObjListClass)))
return NULL;
- bindings->objs = virHashNew(virObjectFreeHashData);
+ bindings->objs = virHashNew(virObjectUnref);
return bindings;
}
@@ -131,7 +131,7 @@ virNWFilterBindingObjListFindByPortDev(virNWFilterBindingObjList *bindings,
* tables. Once successfully added into a table, increase the
* reference count since upon removal in virHashRemoveEntry
* the virObjectUnref will be called since the hash tables were
- * configured to call virObjectFreeHashData when the object is
+ * configured to call virObjectUnref when the object is
* removed from the hash table.
*
* Returns 0 on success with 2 references and locked
diff --git a/src/conf/virsecretobj.c b/src/conf/virsecretobj.c
index 92985c4b63..4032cd1e9a 100644
--- a/src/conf/virsecretobj.c
+++ b/src/conf/virsecretobj.c
@@ -118,7 +118,7 @@ virSecretObjListNew(void)
if (!(secrets = virObjectRWLockableNew(virSecretObjListClass)))
return NULL;
- if (!(secrets->objs = virHashNew(virObjectFreeHashData))) {
+ if (!(secrets->objs = virHashNew(virObjectUnref))) {
virObjectUnref(secrets);
return NULL;
}
diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c
index 238d4678a2..e1465c8376 100644
--- a/src/conf/virstorageobj.c
+++ b/src/conf/virstorageobj.c
@@ -151,9 +151,9 @@ virStorageVolObjListNew(void)
if (!(vols = virObjectRWLockableNew(virStorageVolObjListClass)))
return NULL;
- vols->objsKey = virHashNew(virObjectFreeHashData);
- vols->objsName = virHashNew(virObjectFreeHashData);
- vols->objsPath = virHashNew(virObjectFreeHashData);
+ vols->objsKey = virHashNew(virObjectUnref);
+ vols->objsName = virHashNew(virObjectUnref);
+ vols->objsPath = virHashNew(virObjectUnref);
return vols;
}
@@ -378,8 +378,8 @@ virStoragePoolObjListNew(void)
if (!(pools = virObjectRWLockableNew(virStoragePoolObjListClass)))
return NULL;
- pools->objs = virHashNew(virObjectFreeHashData);
- pools->objsName = virHashNew(virObjectFreeHashData);
+ pools->objs = virHashNew(virObjectUnref);
+ pools->objsName = virHashNew(virObjectUnref);
return pools;
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1e757389e6..f4732f1742 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2978,8 +2978,6 @@ virClassForObjectRWLockable;
virClassIsDerivedFrom;
virClassName;
virClassNew;
-virObjectFreeCallback;
-virObjectFreeHashData;
virObjectIsClass;
virObjectListFree;
virObjectListFreeCount;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 60ed358871..94b2e3118c 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1764,7 +1764,7 @@ qemuDomainObjPrivateAlloc(void *opaque)
if (!(priv->devs = virChrdevAlloc()))
return NULL;
- priv->blockjobs = virHashNew(virObjectFreeHashData);
+ priv->blockjobs = virHashNew(virObjectUnref);
/* agent commands block by default, user can choose different behavior */
priv->agentTimeout = VIR_DOMAIN_AGENT_RESPONSE_TIMEOUT_BLOCK;
diff --git a/src/remote/remote_daemon_stream.c b/src/remote/remote_daemon_stream.c
index 645be6eafd..912f3f9f94 100644
--- a/src/remote/remote_daemon_stream.c
+++ b/src/remote/remote_daemon_stream.c
@@ -440,7 +440,7 @@ int daemonAddClientStream(virNetServerClient *client,
if (virStreamEventAddCallback(stream->st, 0,
daemonStreamEvent, client,
- virObjectFreeCallback) < 0)
+ virObjectUnref) < 0)
return -1;
virObjectRef(client);
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 94566069f0..0ca365c4cc 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -1096,7 +1096,7 @@ doRemoteOpen(virConnectPtr conn,
virObjectRef(priv->closeCallback);
virNetClientSetCloseCallback(priv->client,
remoteClientCloseFunc,
- priv->closeCallback, virObjectFreeCallback);
+ priv->closeCallback, virObjectUnref);
if (!(priv->remoteProgram = virNetClientProgramNew(REMOTE_PROGRAM,
REMOTE_PROTOCOL_VERSION,
@@ -1301,7 +1301,7 @@ doRemoteClose(virConnectPtr conn, struct private_data *priv)
virNetClientSetCloseCallback(priv->client,
NULL,
- priv->closeCallback, virObjectFreeCallback);
+ priv->closeCallback, virObjectUnref);
virNetClientClose(priv->client);
g_clear_pointer(&priv->client, virObjectUnref);
@@ -6142,7 +6142,7 @@ remoteDomainMigratePrepareTunnel3(virConnectPtr dconn,
st->driver = &remoteStreamDrv;
st->privateData = netst;
- st->ff = virObjectFreeCallback;
+ st->ff = virObjectUnref;
args.cookie_in.cookie_in_val = (char *)cookiein;
args.cookie_in.cookie_in_len = cookieinlen;
@@ -7082,7 +7082,7 @@ remoteDomainMigratePrepareTunnel3Params(virConnectPtr dconn,
st->driver = &remoteStreamDrv;
st->privateData = netst;
- st->ff = virObjectFreeCallback;
+ st->ff = virObjectUnref;
if (call(dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS,
(xdrproc_t) xdr_remote_domain_migrate_prepare_tunnel3_params_args,
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index a64ff3e73f..5f2b163ea0 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -1837,7 +1837,7 @@ elsif ($mode eq "client") {
print "\n";
print " st->driver = &remoteStreamDrv;\n";
print " st->privateData = netst;\n";
- print " st->ff = virObjectFreeCallback;\n";
+ print " st->ff = virObjectUnref;\n";
}
if ($call->{ProcName} eq "SupportsFeature") {
diff --git a/src/rpc/virkeepalive.c b/src/rpc/virkeepalive.c
index b7ee6fb169..434cc2c7c9 100644
--- a/src/rpc/virkeepalive.c
+++ b/src/rpc/virkeepalive.c
@@ -275,7 +275,7 @@ virKeepAliveStart(virKeepAlive *ka,
timeout = ka->interval - delay;
ka->intervalStart = now - (ka->interval - timeout);
ka->timer = virEventAddTimeout(timeout * 1000, virKeepAliveTimer,
- ka, virObjectFreeCallback);
+ ka, virObjectUnref);
if (ka->timer < 0)
goto cleanup;
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 3f79c03a58..1202b0f30c 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -658,7 +658,7 @@ int virNetClientRegisterAsyncIO(virNetClient *client)
VIR_EVENT_HANDLE_READABLE,
virNetClientIncomingEvent,
client,
- virObjectFreeCallback) < 0) {
+ virObjectUnref) < 0) {
virObjectUnref(client);
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to register async IO callback"));
@@ -688,7 +688,7 @@ int virNetClientRegisterKeepAlive(virNetClient *client)
if (!(ka = virKeepAliveNew(-1, 0, client,
virNetClientKeepAliveSendCB,
virNetClientKeepAliveDeadCB,
- virObjectFreeCallback)))
+ virObjectUnref)))
return -1;
/* keepalive object has a reference to client */
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
index a03f67e542..e0e3178111 100644
--- a/src/rpc/virnetclientstream.c
+++ b/src/rpc/virnetclientstream.c
@@ -727,7 +727,7 @@ int virNetClientStreamEventAddCallback(virNetClientStream *st,
virEventAddTimeout(-1,
virNetClientStreamEventTimer,
st,
- virObjectFreeCallback)) < 0) {
+ virObjectUnref)) < 0) {
virObjectUnref(st);
goto cleanup;
}
diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index ac12d2d412..c4f5bbdce5 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -142,7 +142,7 @@ virNetDaemonNew(void)
if (!(dmn = virObjectLockableNew(virNetDaemonClass)))
return NULL;
- dmn->servers = virHashNew(virObjectFreeHashData);
+ dmn->servers = virHashNew(virObjectUnref);
#ifndef WIN32
dmn->sigwrite = dmn->sigread = -1;
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
index bb70856351..d57ca07167 100644
--- a/src/rpc/virnetserverclient.c
+++ b/src/rpc/virnetserverclient.c
@@ -202,7 +202,7 @@ static int virNetServerClientRegisterEvent(virNetServerClient *client)
mode,
virNetServerClientDispatchEvent,
client,
- virObjectFreeCallback) < 0) {
+ virObjectUnref) < 0) {
virObjectUnref(client);
return -1;
}
@@ -1521,7 +1521,7 @@ virNetServerClientInitKeepAlive(virNetServerClient *client,
if (!(ka = virKeepAliveNew(interval, count, client,
virNetServerClientKeepAliveSendCB,
virNetServerClientKeepAliveDeadCB,
- virObjectFreeCallback)))
+ virObjectUnref)))
return -1;
/* keepalive object has a reference to client */
diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c
index 214eae1acb..682b2091c1 100644
--- a/src/rpc/virnetserverservice.c
+++ b/src/rpc/virnetserverservice.c
@@ -152,7 +152,7 @@ virNetServerServiceNewSocket(virNetSocket **socks,
virObjectRef(svc);
svc->timer = virEventAddTimeout(-1, virNetServerServiceTimerFunc,
- svc, virObjectFreeCallback);
+ svc, virObjectUnref);
if (svc->timer < 0) {
virObjectUnref(svc);
goto error;
@@ -169,7 +169,7 @@ virNetServerServiceNewSocket(virNetSocket **socks,
0,
virNetServerServiceAccept,
svc,
- virObjectFreeCallback) < 0) {
+ virObjectUnref) < 0) {
virObjectUnref(svc);
goto error;
}
@@ -361,7 +361,7 @@ virNetServerService *virNetServerServiceNewPostExecRestart(virJSONValue *object)
0,
virNetServerServiceAccept,
svc,
- virObjectFreeCallback) < 0) {
+ virObjectUnref) < 0) {
virObjectUnref(svc);
goto error;
}
diff --git a/src/util/virobject.c b/src/util/virobject.c
index d1cd4d32f1..b74d74a545 100644
--- a/src/util/virobject.c
+++ b/src/util/virobject.c
@@ -598,36 +598,6 @@ virClassName(virClass *klass)
}
-/**
- * virObjectFreeCallback:
- * @opaque: a pointer to a virObject instance
- *
- * Provides identical functionality to virObjectUnref,
- * but with the signature matching the virFreeCallback
- * typedef.
- */
-void virObjectFreeCallback(void *opaque)
-{
- virObjectUnref(opaque);
-}
-
-
-/**
- * virObjectFreeHashData:
- * @opaque: a pointer to a virObject instance
- * @name: ignored, name of the hash key being deleted
- *
- * Provides identical functionality to virObjectUnref,
- * but with the signature matching the GDestroyNotify
- * typedef used with hash tables.
- */
-void
-virObjectFreeHashData(void *opaque)
-{
- virObjectUnref(opaque);
-}
-
-
/**
* virObjectListFree:
* @list: A pointer to a NULL-terminated list of object pointers to free
diff --git a/src/util/virobject.h b/src/util/virobject.h
index 4b941ac215..8c06c1b929 100644
--- a/src/util/virobject.h
+++ b/src/util/virobject.h
@@ -104,12 +104,6 @@ virObjectIsClass(void *obj,
virClass *klass)
ATTRIBUTE_NONNULL(2);
-void
-virObjectFreeCallback(void *opaque);
-
-void
-virObjectFreeHashData(void *opaque);
-
void *
virObjectLockableNew(virClass *klass)
ATTRIBUTE_NONNULL(1);
diff --git a/tests/qemustatusxml2xmltest.c b/tests/qemustatusxml2xmltest.c
index cd43820551..db82a1a980 100644
--- a/tests/qemustatusxml2xmltest.c
+++ b/tests/qemustatusxml2xmltest.c
@@ -78,7 +78,7 @@ mymain(void)
int ret = 0;
g_autofree char *fakerootdir = NULL;
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
- g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
+ g_autoptr(GHashTable) capscache = virHashNew(virObjectUnref);
g_autoptr(virConnect) conn = NULL;
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 5b40a0d7f5..b2da42cb1f 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -835,7 +835,7 @@ mymain(void)
g_autofree char *fakerootdir = NULL;
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
g_autoptr(GHashTable) qapiSchemaCache = virHashNew((GDestroyNotify) g_hash_table_unref);
- g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
+ g_autoptr(GHashTable) capscache = virHashNew(virObjectUnref);
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
.qapiSchemaCache = qapiSchemaCache };
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 58929b68c1..68e5041bfd 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -122,7 +122,7 @@ mymain(void)
g_autofree char *fakerootdir = NULL;
g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
- g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
+ g_autoptr(GHashTable) capscache = virHashNew(virObjectUnref);
g_autoptr(virConnect) conn = NULL;
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
diff --git a/tools/virsh-console.c b/tools/virsh-console.c
index 13ee811a92..6bfb44a190 100644
--- a/tools/virsh-console.c
+++ b/tools/virsh-console.c
@@ -451,7 +451,7 @@ virshRunConsole(vshControl *ctl,
VIR_EVENT_HANDLE_READABLE,
virConsoleEventOnStdin,
con,
- virObjectFreeCallback)) < 0) {
+ virObjectUnref)) < 0) {
virObjectUnref(con);
goto cleanup;
}
@@ -461,7 +461,7 @@ virshRunConsole(vshControl *ctl,
0,
virConsoleEventOnStdout,
con,
- virObjectFreeCallback)) < 0) {
+ virObjectUnref)) < 0) {
virObjectUnref(con);
goto cleanup;
}
@@ -471,7 +471,7 @@ virshRunConsole(vshControl *ctl,
VIR_STREAM_EVENT_READABLE,
virConsoleEventOnStream,
con,
- virObjectFreeCallback) < 0) {
+ virObjectUnref) < 0) {
virObjectUnref(con);
goto cleanup;
}
--
2.35.3
2 years, 5 months
[libvirt PATCH v2 00/10] docs: Expand documentation on the CI/testing topic
by Erik Skultety
This series was inspired by QEMU's documentation on CI and focuses on the
following:
- adds documentation on how to add a custom runner to the libvirt project or
its fork, mainly in context of running functional testing
- replaces the old 'testsuites' article with a more detailed landing page
describing different types of testing available in libvirt
- updates the TCK documentation with details on how TCK should be installed
and used nowadays
Since v1:
- described the --force argument with TCK usage
- moved the article about adding new platforms to libvirt-ci and linked it
from our docs
-> corresponding MR here: https://gitlab.com/libvirt/libvirt-ci/-/merge_requests/295
-> ^the MR must merged **FIRST**!
- moved Podman prerequistes for local container builds before Docker
Here's a fresh website pipeline with artifacts:
https://gitlab.com/eskultety/libvirt/-/jobs/2722840726
Erik Skultety (10):
docs: Move the CI dashboard to its own RST module
docs: Provide more information about the TCK test suite
docs: Provide an article on how to add a custom runner to the project
docs: Provide an article on testing
docs: Replace testsuites article with the new 'testing' article
docs: Drop the testsuites article
docs: Change the CI headline from "CI Testing" to "CI"
docs: ci: Add info about the two major types of jobs our CI runs
docs: ci: Add a section on how to add a new platform to libvirt CI
docs: ci: Add a brief section on how to run the CI workload locally
docs/ci-dashboard.rst | 216 ++++++++++++++++++++++++++++++++++++++
docs/ci-runners.rst | 86 +++++++++++++++
docs/ci.rst | 237 ++++++------------------------------------
docs/docs.rst | 10 +-
docs/meson.build | 4 +-
docs/testing.rst | 172 ++++++++++++++++++++++++++++++
docs/testsuites.rst | 37 -------
docs/testtck.rst | 99 ++++++++++++++++--
8 files changed, 602 insertions(+), 259 deletions(-)
create mode 100644 docs/ci-dashboard.rst
create mode 100644 docs/ci-runners.rst
create mode 100644 docs/testing.rst
delete mode 100644 docs/testsuites.rst
--
2.36.1
2 years, 5 months
[PATCH 0/3] qemu: add an API for "query-stats" QMP command
by Amneesh Singh
QEMU is gaining introspectable statistics which can be queried via the
"query-stats" QMP command. This patchset aims to add an API for the
same.
The returned JSON for "query-stats" is an array of objects containing
their own respective array of statistics.
Patch 1 adds the API which returns the deserialized JSON in the form of
a GPtrArray of GHashTables.
Patch 2 adds the "query-stats" to QEMU capabilities.
Patch 3 uses the API to query the halt poll success time and the halt
poll failure time.
v2 -> v3
========
Sorry for the late patchset, I was under the impression I had sent it on
Monday but apparently, I did not.
[1/3]:
- use a single enum for all the statistics.
- use QEMU_MONITOR_QUERY_STATS_NAME_LAST as the sentinel value for the
provider constructor.
- relevant changes to enum values.
[2/3]:
- fix comment spacing
[3/3]
- better checks
v1 -> v2
========
I have been tinkering with the v1 patchset and have rewrote the v2
patches a couple of times. I believe the current patchset is still not
perfect and would appreciate some reviews.
I have another patch or two written but they do not make any significant
changes to the current patchset.
[1/3]:
- use virBitmap instead of an array of strings for statistics.
- add enums for the stat names and add
qemuMonitorQueryStatsNameTypeToString to switch between the
"ToString" functions based on the target type.
- change qemuMonitorQueryStatsProviderNew to a variadic function that
takes stat enum values with the sentinel value being -1.
[2/3]:
- No changes
[3/3]:
- Add relevant monitor related checks to check if the domain is
active.
- Acquire and release qemuMonitorObj lock before and after calling
qemuMonitorQueryStats respectively.
- Add the check for privileged access.
Relevant QEMU patches can be found here:
https://lore.kernel.org/all/20220530150714.756954-1-pbonzini@redhat.com/
This patchset is part of the 2022 GSOC contributor project.
Amneesh Singh (3):
qemu_monitor: add qemuMonitorQueryStats
qemu_capabilities: add "query-stats" QMP command to the QEMU
capabilities
qemu_driver: use qemuMonitorQueryStats to extract halt poll time
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_driver.c | 69 ++++++++++++++++---
src/qemu/qemu_monitor.c | 70 +++++++++++++++++++
src/qemu/qemu_monitor.h | 45 ++++++++++++
src/qemu/qemu_monitor_json.c | 130 +++++++++++++++++++++++++++++++++++
src/qemu/qemu_monitor_json.h | 6 ++
7 files changed, 315 insertions(+), 8 deletions(-)
--
2.36.1
2 years, 5 months
[PATCH v2 0/6] conf: Introduce @guestReset to hostdev's <source/>
by Michal Privoznik
v2 of:
https://listman.redhat.com/archives/libvir-list/2022-July/232756.html
diff to v2:
- Fixed capabilities files per Jano's review
Michal Prívozník (6):
tests: Update hostdev-usb-* hostdev-pci-* xml2xml and xml2argv tests
tests: Fix qemu replies wrt usb-host properties
conf: Introduce @guestReset to hostdev's <source/>
qemu_capabilities: Track usb-host.guest-resets-all capability
qemu_validate: Validate that QEMU's capable of guestReset
qemu: Generate cmd line for guestReset
docs/formatdomain.rst | 15 +++++++-
src/conf/domain_conf.c | 18 +++++++++
src/conf/domain_conf.h | 13 +++++++
src/conf/schemas/domaincommon.rng | 9 +++++
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 21 ++++++++++
src/qemu/qemu_validate.c | 8 ++++
.../caps_3.1.0.ppc64.replies | 15 --------
.../caps_3.1.0.x86_64.replies | 15 --------
.../caps_4.0.0.aarch64.replies | 10 -----
.../caps_4.0.0.ppc64.replies | 10 -----
.../caps_4.0.0.riscv32.replies | 10 -----
.../caps_4.0.0.riscv64.replies | 10 -----
.../caps_4.0.0.s390x.replies | 10 -----
.../caps_4.0.0.x86_64.replies | 10 -----
.../caps_4.1.0.x86_64.replies | 10 -----
.../caps_4.2.0.aarch64.replies | 5 ---
.../caps_4.2.0.aarch64.xml | 1 +
.../caps_4.2.0.ppc64.replies | 5 ---
.../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 +
.../caps_4.2.0.s390x.replies | 5 ---
.../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 +
.../caps_4.2.0.x86_64.replies | 5 ---
.../caps_4.2.0.x86_64.xml | 1 +
.../caps_5.0.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 +
.../caps_5.0.0.riscv64.xml | 1 +
.../caps_5.0.0.x86_64.xml | 1 +
.../caps_5.1.0.x86_64.xml | 1 +
.../caps_5.2.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 +
.../caps_5.2.0.riscv64.xml | 1 +
.../caps_5.2.0.x86_64.xml | 1 +
.../caps_6.0.0.aarch64.xml | 1 +
.../caps_6.0.0.x86_64.xml | 1 +
.../caps_6.1.0.x86_64.xml | 1 +
.../caps_6.2.0.aarch64.xml | 1 +
.../caps_6.2.0.x86_64.xml | 1 +
.../caps_7.0.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 1 +
.../caps_7.0.0.x86_64.xml | 1 +
.../caps_7.1.0.x86_64.xml | 1 +
.../hostdev-pci-address-device.args | 34 -----------------
...tdev-pci-address-device.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-pci-address-device.xml | 2 +-
.../qemuxml2argvdata/hostdev-pci-address.args | 33 ----------------
.../hostdev-pci-address.x86_64-latest.args | 37 ++++++++++++++++++
.../qemuxml2argvdata/hostdev-pci-address.xml | 2 +-
.../hostdev-usb-address-device-boot.args | 34 -----------------
...usb-address-device-boot.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-usb-address-device-boot.xml | 2 +-
.../hostdev-usb-address-device.args | 34 -----------------
...tdev-usb-address-device.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-usb-address-device.xml | 2 +-
.../qemuxml2argvdata/hostdev-usb-address.args | 33 ----------------
.../hostdev-usb-address.x86_64-latest.args | 37 ++++++++++++++++++
.../qemuxml2argvdata/hostdev-usb-address.xml | 4 +-
tests/qemuxml2argvtest.c | 10 ++---
... => hostdev-pci-address.x86_64-latest.xml} | 7 +++-
... => hostdev-usb-address.x86_64-latest.xml} | 9 +++--
tests/qemuxml2xmltest.c | 4 +-
62 files changed, 320 insertions(+), 307 deletions(-)
delete mode 100644 tests/qemuxml2argvdata/hostdev-pci-address-device.args
create mode 100644 tests/qemuxml2argvdata/hostdev-pci-address-device.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-pci-address.args
create mode 100644 tests/qemuxml2argvdata/hostdev-pci-address.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device-boot.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device-boot.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args
rename tests/qemuxml2xmloutdata/{hostdev-pci-address.xml => hostdev-pci-address.x86_64-latest.xml} (86%)
rename tests/qemuxml2xmloutdata/{hostdev-usb-address.xml => hostdev-usb-address.x86_64-latest.xml} (83%)
--
2.35.1
2 years, 5 months
[libvirt PATCH] docs: replace ARRAY_CARDINALITY with G_N_ELEMENTS
by Daniel P. Berrangé
Fix docs illustrating call with an obsolete macro.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/kbase/internals/locking.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/kbase/internals/locking.rst b/docs/kbase/internals/locking.rst
index 50d2b92d57..7a863ab4b2 100644
--- a/docs/kbase/internals/locking.rst
+++ b/docs/kbase/internals/locking.rst
@@ -127,7 +127,7 @@ locks, this will be done from the libvirtd process.
};
mgr = virLockManagerNew(lockPlugin,
VIR_LOCK_MANAGER_TYPE_DOMAIN,
- ARRAY_CARDINALITY(params),
+ G_N_ELEMENTS(params),
params,
0)));
@@ -171,7 +171,7 @@ however, a process may voluntarily give up the lock by running
};
mgr = virLockManagerNew(lockPlugin,
VIR_LOCK_MANAGER_TYPE_DOMAIN,
- ARRAY_CARDINALITY(params),
+ G_N_ELEMENTS(params),
params,
0)));
--
2.36.1
2 years, 5 months
[libvirt PATCH 00/10] docs: Expand documentation on the CI/testing topic
by Erik Skultety
This series was inspired by QEMU's documentation on CI and focuses on the
following:
- adds documentation on how to add a custom runner to the libvirt project or
its fork, mainly in context of running functional testing
- replaces the old 'testsuites' article with a more detailed landing page
describing different types of testing available in libvirt
- updates the TCK documentation with details on how TCK should be installed
and used nowadays
For sure we can add lots more content related to testing in libvirt but I think
this series provides a solid foundation that can be easily expanded on in the
future.
Here's the website build artifact to see what it'll look like eventually:
https://gitlab.com/eskultety/libvirt/-/jobs/2709823650
Erik Skultety (10):
docs: Move the CI dashboard to its own RST module
docs: Provide more information about the TCK test suite
docs: Provide an article on how to add a custom runner to the project
docs: Provide an article on testing
docs: Replace testsuites article with the new 'testing' article
docs: Drop the testsuites article
docs: Change the CI headline from "CI Testing" to "CI"
docs: ci: Add info about the two major types of jobs our CI runs
docs: ci: Add a section on how to add a new platform to libvirt CI
docs: ci: Add a brief section on how to run the CI workload locally
docs/ci-dashboard.rst | 216 +++++++++++++++++++++++++++++++++++
docs/ci-runners.rst | 86 ++++++++++++++
docs/ci.rst | 255 +++++++++++-------------------------------
docs/docs.rst | 10 +-
docs/meson.build | 4 +-
docs/testing.rst | 176 +++++++++++++++++++++++++++++
docs/testsuites.rst | 37 ------
docs/testtck.rst | 92 +++++++++++++--
8 files changed, 631 insertions(+), 245 deletions(-)
create mode 100644 docs/ci-dashboard.rst
create mode 100644 docs/ci-runners.rst
create mode 100644 docs/testing.rst
delete mode 100644 docs/testsuites.rst
--
2.36.1
2 years, 5 months
[PATCH 0/5] conf: Introduce @guestReset to hostdev's <source/>
by Michal Privoznik
There are couple of examples where this knob would be useful:
https://bugs.launchpad.net/qemu/+bug/1846451
(look for those cmd line passthrough hacks), and one pretty recent
request:
https://listman.redhat.com/archives/libvir-list/2022-June/232611.html
The last patch uses info from Kraxel's patch (which he posted after our
private discussion):
https://lists.gnu.org/archive/html/qemu-devel/2022-07/msg01733.html
Michal Prívozník (5):
tests: Update hostdev-usb-* hostdev-pci-* xml2xml and xml2argv tests
conf: Introduce @guestReset to hostdev's <source/>
qemu_capabilities: Track usb-host.guest-resets-all capability
qemu_validate: Validate that QEMU's capable of guestReset
qemu: Generate cmd line for guestReset
docs/formatdomain.rst | 15 +++++++-
src/conf/domain_conf.c | 18 +++++++++
src/conf/domain_conf.h | 13 +++++++
src/conf/schemas/domaincommon.rng | 9 +++++
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 21 ++++++++++
src/qemu/qemu_validate.c | 8 ++++
.../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 +
.../caps_3.1.0.x86_64.xml | 1 +
.../caps_4.0.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 +
.../caps_4.0.0.riscv32.xml | 1 +
.../caps_4.0.0.riscv64.xml | 1 +
.../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 +
.../caps_4.0.0.x86_64.xml | 1 +
.../caps_4.1.0.x86_64.xml | 1 +
.../caps_4.2.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 +
.../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 +
.../caps_4.2.0.x86_64.xml | 1 +
.../caps_5.0.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 +
.../caps_5.0.0.riscv64.xml | 1 +
.../caps_5.0.0.x86_64.xml | 1 +
.../caps_5.1.0.x86_64.xml | 1 +
.../caps_5.2.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 +
.../caps_5.2.0.riscv64.xml | 1 +
.../caps_5.2.0.x86_64.xml | 1 +
.../caps_6.0.0.aarch64.xml | 1 +
.../caps_6.0.0.x86_64.xml | 1 +
.../caps_6.1.0.x86_64.xml | 1 +
.../caps_6.2.0.aarch64.xml | 1 +
.../caps_6.2.0.x86_64.xml | 1 +
.../caps_7.0.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 1 +
.../caps_7.0.0.x86_64.xml | 1 +
.../caps_7.1.0.x86_64.xml | 1 +
.../hostdev-pci-address-device.args | 34 -----------------
...tdev-pci-address-device.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-pci-address-device.xml | 2 +-
.../qemuxml2argvdata/hostdev-pci-address.args | 33 ----------------
.../hostdev-pci-address.x86_64-latest.args | 37 ++++++++++++++++++
.../qemuxml2argvdata/hostdev-pci-address.xml | 2 +-
.../hostdev-usb-address-device-boot.args | 34 -----------------
...usb-address-device-boot.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-usb-address-device-boot.xml | 2 +-
.../hostdev-usb-address-device.args | 34 -----------------
...tdev-usb-address-device.x86_64-latest.args | 38 +++++++++++++++++++
.../hostdev-usb-address-device.xml | 2 +-
.../qemuxml2argvdata/hostdev-usb-address.args | 33 ----------------
.../hostdev-usb-address.x86_64-latest.args | 37 ++++++++++++++++++
.../qemuxml2argvdata/hostdev-usb-address.xml | 4 +-
tests/qemuxml2argvtest.c | 10 ++---
... => hostdev-pci-address.x86_64-latest.xml} | 7 +++-
... => hostdev-usb-address.x86_64-latest.xml} | 9 +++--
tests/qemuxml2xmltest.c | 4 +-
58 files changed, 329 insertions(+), 187 deletions(-)
delete mode 100644 tests/qemuxml2argvdata/hostdev-pci-address-device.args
create mode 100644 tests/qemuxml2argvdata/hostdev-pci-address-device.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-pci-address.args
create mode 100644 tests/qemuxml2argvdata/hostdev-pci-address.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device-boot.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device-boot.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address-device.x86_64-latest.args
delete mode 100644 tests/qemuxml2argvdata/hostdev-usb-address.args
create mode 100644 tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args
rename tests/qemuxml2xmloutdata/{hostdev-pci-address.xml => hostdev-pci-address.x86_64-latest.xml} (86%)
rename tests/qemuxml2xmloutdata/{hostdev-usb-address.xml => hostdev-usb-address.x86_64-latest.xml} (83%)
--
2.35.1
2 years, 5 months
[PATCH 0/5] Follow up fixes for IOThreads
by Michal Privoznik
Couple of issues were found with my recent work on IOThread and its pool
size limits. Here are fixes.
Michal Prívozník (5):
domain_conf: Format <defaultiothread/> more often
domain_conf: Format iothread IDs more often
qemu: Make IOThread changing more robust
qemuDomainSetIOThreadParams: Accept VIR_DOMAIN_AFFECT_CONFIG flag
virsh: Implement --config for iothreadset
src/conf/domain_conf.c | 50 ++++++++++----------
src/qemu/qemu_driver.c | 101 +++++++++++++++++++++++------------------
tools/virsh-domain.c | 8 ++++
3 files changed, 90 insertions(+), 69 deletions(-)
--
2.35.1
2 years, 5 months
[PATCH 0/4] qemu: Report supported TPM version in domcaps
by Michal Privoznik
*** BLURB HERE ***
Michal Prívozník (4):
docs: Document TPM portion of domcaps
virtpm: Introduce TPM-1.2 and TPM-2.0 capabilieis
domcaps: Introduce TPM backendVersion
qemu: Report supported TPM version in domcaps
docs/formatdomaincaps.rst | 36 ++++++++++++++++++++++++++++++++++
src/conf/domain_capabilities.c | 1 +
src/conf/domain_capabilities.h | 1 +
src/qemu/qemu_capabilities.c | 15 +++++++++++---
src/util/virtpm.c | 2 ++
src/util/virtpm.h | 2 ++
6 files changed, 54 insertions(+), 3 deletions(-)
--
2.35.1
2 years, 5 months