[PATCH 0/4] qemu: Let virCommand report errors

In a lot of places we catch errors from qemuSecurityCommandRun() only to produce an error report. But we can let virCommand module do the same. Michal Prívozník (4): qemu_slirp: Don't set errfd when starting slirp helper qemu: Don't overwrite error from qemuSecurityCommandRun() qemu: Drop @cmdret argument from qemuSecurityCommandRun() qemu: Let virCommand module translate exitstatus src/qemu/qemu_dbus.c | 11 +---------- src/qemu/qemu_passt.c | 12 +----------- src/qemu/qemu_security.c | 13 ++++++------- src/qemu/qemu_security.h | 3 +-- src/qemu/qemu_slirp.c | 12 +----------- src/qemu/qemu_tpm.c | 9 +-------- src/qemu/qemu_vhost_user_gpu.c | 11 ++--------- 7 files changed, 13 insertions(+), 58 deletions(-) -- 2.39.2

Way back, in v6.2.0-rc1~67 we removed the code that reads slip's stderr on failed startup. However, we forgot to remove corresponding virCommandSetErrorFD() call and variable declaration. Do that now. While this may seem like a step in wrong direction (we should be reading stderr as it may contain reason for failed start), this is going to be handled in more general way in next commits. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_slirp.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c index 3f83db03bf..faf58b0394 100644 --- a/src/qemu/qemu_slirp.c +++ b/src/qemu/qemu_slirp.c @@ -249,7 +249,6 @@ qemuSlirpStart(virDomainObj *vm, int rc; int exitstatus = 0; int cmdret = 0; - VIR_AUTOCLOSE errfd = -1; bool killDBusDaemon = false; g_autofree char *fdname = g_strdup_printf("slirpfd-%s", net->info.alias); @@ -272,7 +271,6 @@ qemuSlirpStart(virDomainObj *vm, virCommandClearCaps(cmd); virCommandSetPidFile(cmd, pidfile); - virCommandSetErrorFD(cmd, &errfd); virCommandDaemonize(cmd); virCommandAddArgFormat(cmd, "--fd=%d", slirp->fd[1]); -- 2.39.2

On a Monday in 2023, Michal Privoznik wrote:
Way back, in v6.2.0-rc1~67 we removed the code that reads slip's
*slirp
stderr on failed startup. However, we forgot to remove corresponding virCommandSetErrorFD() call and variable declaration. Do that now.
While this may seem like a step in wrong direction (we should be reading stderr as it may contain reason for failed start), this is going to be handled in more general way in next commits.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_slirp.c | 2 -- 1 file changed, 2 deletions(-)

The usual pattern when starting a helper daemon is: if (qemuSecurityCommandRun(..., &exitstatus, &cmdret) < 0) goto cleanup; if (cmdret < 0 || exitstatus != 0) { virReportError(); goto cleanup; } The only problem with this pattern is that if virCommandRun() fails (i.e. cmdret < 0), then proper error was already reported. But in this pattern we overwrite it (usually with less specific) error. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_dbus.c | 6 ++++-- src/qemu/qemu_passt.c | 6 ++++-- src/qemu/qemu_security.c | 5 +++-- src/qemu/qemu_slirp.c | 6 ++++-- src/qemu/qemu_vhost_user_gpu.c | 6 ++++-- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c index cb2694795e..a5807527a6 100644 --- a/src/qemu/qemu_dbus.c +++ b/src/qemu/qemu_dbus.c @@ -224,8 +224,10 @@ qemuDBusStart(virQEMUDriver *driver, goto cleanup; if (cmdret < 0 || exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start dbus-daemon. exitstatus: %d"), exitstatus); + if (cmdret >= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start dbus-daemon. exitstatus: %d"), exitstatus); + } goto cleanup; } diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index 1217a6a087..53a7cc9605 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -275,8 +275,10 @@ qemuPasstStart(virDomainObj *vm, goto error; if (cmdret < 0 || exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'passt': %s"), NULLSTR(errbuf)); + if (cmdret >= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'passt': %s"), NULLSTR(errbuf)); + } goto error; } diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c index beada669f7..2548fc0ecd 100644 --- a/src/qemu/qemu_security.c +++ b/src/qemu/qemu_security.c @@ -626,10 +626,11 @@ qemuSecurityDomainRestorePathLabel(virQEMUDriver *driver, * @cmdret: pointer to int returning result of virCommandRun * * Run @cmd with seclabels set on it. If @uid and/or @gid are not - * -1 then their value is enforced. + * -1 then their value is enforced. If @cmdret is negative upon + * return, then appropriate error was already reported. * * Returns: 0 on success, - * -1 otherwise. + * -1 otherwise (with error reported). */ int qemuSecurityCommandRun(virQEMUDriver *driver, diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c index faf58b0394..1bd45cb06c 100644 --- a/src/qemu/qemu_slirp.c +++ b/src/qemu/qemu_slirp.c @@ -331,8 +331,10 @@ qemuSlirpStart(virDomainObj *vm, goto error; if (cmdret < 0 || exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'slirp'. exitstatus: %d"), exitstatus); + if (cmdret >= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'slirp'. exitstatus: %d"), exitstatus); + } goto error; } diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c index bc5a1dc3ec..a9a5fe3a3e 100644 --- a/src/qemu/qemu_vhost_user_gpu.c +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -157,8 +157,10 @@ int qemuExtVhostUserGPUStart(virQEMUDriver *driver, goto error; if (cmdret < 0 || exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'vhost-user-gpu'. exitstatus: %d"), exitstatus); + if (cmdret >= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'vhost-user-gpu'. exitstatus: %d"), exitstatus); + } goto cleanup; } -- 2.39.2

Every single caller of qemuSecurityCommandRun() calls the function as: if (qemuSecurityCommandRun(..., &cmdret) < 0) goto cleanup; if (cmdret < 0) goto cleanup; (modulo @exitstatus shenanigans) Well, there's no need for such complication. There isn't a single caller (and probably will never be (TM)), that would need to distinguish the reason for the failure. Therefore, qemuSecurityCommandRun() can be made to pass the retval of virCommandRun() called under the hood. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_dbus.c | 12 ++++-------- src/qemu/qemu_passt.c | 11 ++++------- src/qemu/qemu_security.c | 12 +++++------- src/qemu/qemu_security.h | 3 +-- src/qemu/qemu_slirp.c | 11 ++++------- src/qemu/qemu_tpm.c | 9 +-------- src/qemu/qemu_vhost_user_gpu.c | 12 +++++------- 7 files changed, 24 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c index a5807527a6..74cb5457ea 100644 --- a/src/qemu/qemu_dbus.c +++ b/src/qemu/qemu_dbus.c @@ -182,7 +182,6 @@ qemuDBusStart(virQEMUDriver *driver, virTimeBackOffVar timebackoff; const unsigned long long timeout = 500 * 1000; /* ms */ VIR_AUTOCLOSE errfd = -1; - int cmdret = 0; int exitstatus = 0; pid_t cpid = -1; int ret = -1; @@ -219,15 +218,12 @@ qemuDBusStart(virQEMUDriver *driver, virCommandDaemonize(cmd); virCommandAddArgFormat(cmd, "--config-file=%s", configfile); - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, - &exitstatus, &cmdret) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) goto cleanup; - if (cmdret < 0 || exitstatus != 0) { - if (cmdret >= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start dbus-daemon. exitstatus: %d"), exitstatus); - } + if (exitstatus != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start dbus-daemon. exitstatus: %d"), exitstatus); goto cleanup; } diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index 53a7cc9605..81b7917026 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -159,7 +159,6 @@ qemuPasstStart(virDomainObj *vm, char macaddr[VIR_MAC_STRING_BUFLEN]; size_t i; int exitstatus = 0; - int cmdret = 0; cmd = virCommandNew(PASST); @@ -271,14 +270,12 @@ qemuPasstStart(virDomainObj *vm, if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0) return -1; - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus, &cmdret) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) goto error; - if (cmdret < 0 || exitstatus != 0) { - if (cmdret >= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'passt': %s"), NULLSTR(errbuf)); - } + if (exitstatus != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'passt': %s"), NULLSTR(errbuf)); goto error; } diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c index 2548fc0ecd..07fcffb288 100644 --- a/src/qemu/qemu_security.c +++ b/src/qemu/qemu_security.c @@ -623,11 +623,9 @@ qemuSecurityDomainRestorePathLabel(virQEMUDriver *driver, * @uid: the uid to force * @gid: the gid to force * @existstatus: pointer to int returning exit status of process - * @cmdret: pointer to int returning result of virCommandRun * * Run @cmd with seclabels set on it. If @uid and/or @gid are not - * -1 then their value is enforced. If @cmdret is negative upon - * return, then appropriate error was already reported. + * -1 then their value is enforced. * * Returns: 0 on success, * -1 otherwise (with error reported). @@ -638,11 +636,11 @@ qemuSecurityCommandRun(virQEMUDriver *driver, virCommand *cmd, uid_t uid, gid_t gid, - int *exitstatus, - int *cmdret) + int *exitstatus) { g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); qemuDomainObjPrivate *priv = vm->privateData; + int ret = -1; if (virSecurityManagerSetChildProcessLabel(driver->securityManager, vm->def, cmd) < 0) @@ -664,9 +662,9 @@ qemuSecurityCommandRun(virQEMUDriver *driver, if (virSecurityManagerPreFork(driver->securityManager) < 0) return -1; - *cmdret = virCommandRun(cmd, exitstatus); + ret = virCommandRun(cmd, exitstatus); virSecurityManagerPostFork(driver->securityManager); - return 0; + return ret; } diff --git a/src/qemu/qemu_security.h b/src/qemu/qemu_security.h index 8d1c6b38c3..dc8e67cc81 100644 --- a/src/qemu/qemu_security.h +++ b/src/qemu/qemu_security.h @@ -115,8 +115,7 @@ int qemuSecurityCommandRun(virQEMUDriver *driver, virCommand *cmd, uid_t uid, gid_t gid, - int *exitstatus, - int *cmdret); + int *exitstatus); /* Please note that for these APIs there is no wrapper yet. Do NOT blindly add * new APIs here. If an API can touch a file add a proper wrapper instead. diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c index 1bd45cb06c..bbe919f37a 100644 --- a/src/qemu/qemu_slirp.c +++ b/src/qemu/qemu_slirp.c @@ -248,7 +248,6 @@ qemuSlirpStart(virDomainObj *vm, pid_t pid = (pid_t) -1; int rc; int exitstatus = 0; - int cmdret = 0; bool killDBusDaemon = false; g_autofree char *fdname = g_strdup_printf("slirpfd-%s", net->info.alias); @@ -327,14 +326,12 @@ qemuSlirpStart(virDomainObj *vm, if (qemuExtDeviceLogCommand(driver, vm, cmd, "slirp") < 0) goto error; - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus, &cmdret) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) goto error; - if (cmdret < 0 || exitstatus != 0) { - if (cmdret >= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'slirp'. exitstatus: %d"), exitstatus); - } + if (exitstatus != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'slirp'. exitstatus: %d"), exitstatus); goto error; } diff --git a/src/qemu/qemu_tpm.c b/src/qemu/qemu_tpm.c index 5831ffc32e..982e5f13b6 100644 --- a/src/qemu/qemu_tpm.c +++ b/src/qemu/qemu_tpm.c @@ -927,7 +927,6 @@ qemuTPMEmulatorStart(virQEMUDriver *driver, virTimeBackOffVar timebackoff; const unsigned long long timeout = 1000; /* ms */ bool setTPMStateLabel = true; - int cmdret = 0; pid_t pid = -1; cfg = virQEMUDriverGetConfig(driver); @@ -963,15 +962,9 @@ qemuTPMEmulatorStart(virQEMUDriver *driver, return -1; if (qemuSecurityCommandRun(driver, vm, cmd, cfg->swtpm_user, - cfg->swtpm_group, NULL, &cmdret) < 0) + cfg->swtpm_group, NULL) < 0) goto error; - if (cmdret < 0) { - /* virCommandRun() hidden in qemuSecurityCommandRun() - * already reported error. */ - goto error; - } - if (virPidFileReadPath(pidfile, &pid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("swtpm didn't show up")); diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c index a9a5fe3a3e..196ebc7dff 100644 --- a/src/qemu/qemu_vhost_user_gpu.c +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -105,7 +105,7 @@ int qemuExtVhostUserGPUStart(virQEMUDriver *driver, g_autofree char *pidfile = NULL; g_autoptr(virCommand) cmd = NULL; int pair[2] = { -1, -1 }; - int cmdret = 0, rc; + int rc; int exitstatus = 0; pid_t pid; int ret = -1; @@ -153,14 +153,12 @@ int qemuExtVhostUserGPUStart(virQEMUDriver *driver, virCommandAddArgFormat(cmd, "--render-node=%s", video->accel->rendernode); } - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus, &cmdret) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) goto error; - if (cmdret < 0 || exitstatus != 0) { - if (cmdret >= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'vhost-user-gpu'. exitstatus: %d"), exitstatus); - } + if (exitstatus != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'vhost-user-gpu'. exitstatus: %d"), exitstatus); goto cleanup; } -- 2.39.2

When starting (some) external helpers, callers of qemuSecurityCommandRun() pass &exitstatus variable, to learn the exit code of helper process (with qemuTPMEmulatorStart() being the only exception). Then, if the status wasn't zero they produce a generic error message, like: "Starting of helper process failed. exitstatus=%d" or, in case of qemuPasstStart(): "Could not start 'passt': %s" This is needless as virCommandRun() (that's called under the hood), can do both for us, if NULL was passed instead of @exitstatus. Not only it appends exit status, it also reads stderr of failed command producing comprehensive error message: Child process (${args}) unexpected exit status ${exitstatus}: ${stderr} Therefore, pass NULL everywhere. But in contrast with one of previous commits which removed @cmdret argument, there could be a sensible caller which might want to process exit code. So keep the argument for now and just pass NULL. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_dbus.c | 9 +-------- src/qemu/qemu_passt.c | 11 +---------- src/qemu/qemu_security.c | 2 +- src/qemu/qemu_slirp.c | 9 +-------- src/qemu/qemu_vhost_user_gpu.c | 9 +-------- 5 files changed, 5 insertions(+), 35 deletions(-) diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c index 74cb5457ea..a6dc802637 100644 --- a/src/qemu/qemu_dbus.c +++ b/src/qemu/qemu_dbus.c @@ -182,7 +182,6 @@ qemuDBusStart(virQEMUDriver *driver, virTimeBackOffVar timebackoff; const unsigned long long timeout = 500 * 1000; /* ms */ VIR_AUTOCLOSE errfd = -1; - int exitstatus = 0; pid_t cpid = -1; int ret = -1; @@ -218,15 +217,9 @@ qemuDBusStart(virQEMUDriver *driver, virCommandDaemonize(cmd); virCommandAddArgFormat(cmd, "--config-file=%s", configfile); - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, NULL) < 0) goto cleanup; - if (exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start dbus-daemon. exitstatus: %d"), exitstatus); - goto cleanup; - } - if (virPidFileReadPath(pidfile, &cpid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("dbus-daemon %s didn't show up"), diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index 81b7917026..9eb8cb9834 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -155,15 +155,12 @@ qemuPasstStart(virDomainObj *vm, g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net); g_autoptr(virCommand) cmd = NULL; g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net); - g_autofree char *errbuf = NULL; char macaddr[VIR_MAC_STRING_BUFLEN]; size_t i; - int exitstatus = 0; cmd = virCommandNew(PASST); virCommandClearCaps(cmd); - virCommandSetErrorBuffer(cmd, &errbuf); virCommandAddArgList(cmd, "--one-off", @@ -270,15 +267,9 @@ qemuPasstStart(virDomainObj *vm, if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0) return -1; - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, NULL) < 0) goto error; - if (exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'passt': %s"), NULLSTR(errbuf)); - goto error; - } - return 0; error: diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c index 07fcffb288..ee03e2225e 100644 --- a/src/qemu/qemu_security.c +++ b/src/qemu/qemu_security.c @@ -622,7 +622,7 @@ qemuSecurityDomainRestorePathLabel(virQEMUDriver *driver, * @cmd: the command to run * @uid: the uid to force * @gid: the gid to force - * @existstatus: pointer to int returning exit status of process + * @existstatus: optional pointer to int returning exit status of process * * Run @cmd with seclabels set on it. If @uid and/or @gid are not * -1 then their value is enforced. diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c index bbe919f37a..9697542cd3 100644 --- a/src/qemu/qemu_slirp.c +++ b/src/qemu/qemu_slirp.c @@ -247,7 +247,6 @@ qemuSlirpStart(virDomainObj *vm, size_t i; pid_t pid = (pid_t) -1; int rc; - int exitstatus = 0; bool killDBusDaemon = false; g_autofree char *fdname = g_strdup_printf("slirpfd-%s", net->info.alias); @@ -326,15 +325,9 @@ qemuSlirpStart(virDomainObj *vm, if (qemuExtDeviceLogCommand(driver, vm, cmd, "slirp") < 0) goto error; - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, NULL) < 0) goto error; - if (exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'slirp'. exitstatus: %d"), exitstatus); - goto error; - } - rc = virPidFileReadPath(pidfile, &pid); if (rc < 0) { virReportSystemError(-rc, diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c index 196ebc7dff..5b49ef4e28 100644 --- a/src/qemu/qemu_vhost_user_gpu.c +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -106,7 +106,6 @@ int qemuExtVhostUserGPUStart(virQEMUDriver *driver, g_autoptr(virCommand) cmd = NULL; int pair[2] = { -1, -1 }; int rc; - int exitstatus = 0; pid_t pid; int ret = -1; @@ -153,15 +152,9 @@ int qemuExtVhostUserGPUStart(virQEMUDriver *driver, virCommandAddArgFormat(cmd, "--render-node=%s", video->accel->rendernode); } - if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, &exitstatus) < 0) + if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, NULL) < 0) goto error; - if (exitstatus != 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not start 'vhost-user-gpu'. exitstatus: %d"), exitstatus); - goto cleanup; - } - rc = virPidFileReadPath(pidfile, &pid); if (rc < 0) { virReportSystemError(-rc, -- 2.39.2

On a Monday in 2023, Michal Privoznik wrote:
In a lot of places we catch errors from qemuSecurityCommandRun() only to produce an error report. But we can let virCommand module do the same.
Michal Prívozník (4): qemu_slirp: Don't set errfd when starting slirp helper qemu: Don't overwrite error from qemuSecurityCommandRun() qemu: Drop @cmdret argument from qemuSecurityCommandRun() qemu: Let virCommand module translate exitstatus
src/qemu/qemu_dbus.c | 11 +---------- src/qemu/qemu_passt.c | 12 +----------- src/qemu/qemu_security.c | 13 ++++++------- src/qemu/qemu_security.h | 3 +-- src/qemu/qemu_slirp.c | 12 +----------- src/qemu/qemu_tpm.c | 9 +-------- src/qemu/qemu_vhost_user_gpu.c | 11 ++--------- 7 files changed, 13 insertions(+), 58 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko
-
Michal Privoznik