From dc0dc848ee8036403a00d10956073e649ee51548 Mon Sep 17 00:00:00 2001 From: Andrea Bolognani Date: Fri, 23 Feb 2024 01:29:28 +0100 Subject: [PATCH] util: Accept TIDs for virProcess{Get,Set}Affinity() on BSD Depending on the situation, the IDs that we pass to these functions can be either referring to processes or threads. Linux doesn't have separate interfaces for one or the other, but FreeBSD does and we're explicitly telling it that the ID refers to a process. When it refers to a thread instead, the call will fail, and the VM will not be able to start. Luckily, another possible choice is CPU_WHICH_TIDPID, which makes things behave the same as Linux. Signed-off-by: Andrea Bolognani Reviewed-by: Martin Kletzander --- src/util/virprocess.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/virprocess.c b/src/util/virprocess.c index 047b0aa0cd..8384bd1378 100644 --- a/src/util/virprocess.c +++ b/src/util/virprocess.c @@ -551,7 +551,7 @@ int virProcessSetAffinity(pid_t pid, CPU_SET(i, &mask); } - if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, + if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TIDPID, pid, sizeof(mask), &mask) != 0) { if (quiet) { VIR_DEBUG("cannot set CPU affinity on process %d: %s", @@ -574,7 +574,7 @@ virProcessGetAffinity(pid_t pid) virBitmap *ret = NULL; CPU_ZERO(&mask); - if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, + if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TIDPID, pid, sizeof(mask), &mask) != 0) { virReportSystemError(errno, _("cannot get CPU affinity of process %1$d"), pid);