From bd33680f027576ddd875554940f4445b75355315 Mon Sep 17 00:00:00 2001 From: Andrea Bolognani Date: Tue, 2 Mar 2021 18:57:51 +0100 Subject: [PATCH] qemu: Set all limits at the same time qemuProcessLaunch() is the correct place to set process limits, and in fact is where we were dealing with almost all of them, but the memory locking limit was handled in qemuBuildCommandLine() instead for some reason. The code is rewritten so that the desired limit is calculated and applied in separated steps, which will help with further changes, but this doesn't alter the behavior. Signed-off-by: Andrea Bolognani Reviewed-by: Michal Privoznik --- src/qemu/qemu_command.c | 4 ---- src/qemu/qemu_process.c | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5cdb05e795..4461c2762f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10127,10 +10127,6 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, qemuBuildVsockCommandLine(cmd, def, def->vsock, qemuCaps) < 0) return NULL; - /* In some situations, eg. VFIO passthrough, QEMU might need to lock a - * significant amount of memory, so we need to set the limit accordingly */ - virCommandSetMaxMemLock(cmd, qemuDomainGetMemLockLimitBytes(def, false)); - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSG_TIMESTAMP) && cfg->logTimestamp) virCommandAddArgList(cmd, "-msg", "timestamp=on", NULL); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index cee2de2df1..6684065534 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6916,6 +6916,7 @@ qemuProcessLaunch(virConnectPtr conn, g_autoptr(virQEMUDriverConfig) cfg = NULL; size_t nnicindexes = 0; g_autofree int *nicindexes = NULL; + unsigned long long maxMemLock = 0; VIR_DEBUG("conn=%p driver=%p vm=%p name=%s if=%d asyncJob=%d " "incoming.launchURI=%s incoming.deferredURI=%s " @@ -7013,6 +7014,11 @@ qemuProcessLaunch(virConnectPtr conn, VIR_DEBUG("Setting up process limits"); + /* In some situations, eg. VFIO passthrough, QEMU might need to lock a + * significant amount of memory, so we need to set the limit accordingly */ + maxMemLock = qemuDomainGetMemLockLimitBytes(vm->def, false); + + virCommandSetMaxMemLock(cmd, maxMemLock); virCommandSetMaxProcesses(cmd, cfg->maxProcesses); virCommandSetMaxFiles(cmd, cfg->maxFiles); virCommandSetMaxCoreSize(cmd, cfg->maxCore);