[libvirt PATCH] util: Fix stubs for virProcessGet{Stat,Sched}Info()

Andrea Bolognani abologna at redhat.com
Fri Apr 15 16:11:30 UTC 2022


Commit d73852c49962 moved the original QEMU-specific helpers to
the utils module, which resulted in build failures on non-Unix
platforms due to the unconditional use of Unix-only symbols such
as _SC_CLK_TCK.

To deal with that situation, commit d7c64453aa0e made the helpers
Linux-only and added stubs for other platforms that, when called,
would always fail with ENOSYS.

However the original helpers had been carefully written so that,
while they would only be able to produce useful output on Linux,
they would still succeed on the other Unix platforms where we
build the QEMU driver.

Restore the original behavior so that calling APIs such as
virDomainGetInfo() can once again work on FreeBSD and macOS.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/298
Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
Test pipeline: https://gitlab.com/abologna/libvirt/-/pipelines/517776953

 src/util/virprocess.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index b559a4257e..36d7df050a 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -1875,23 +1875,34 @@ virProcessGetSchedInfo(unsigned long long *cpuWait,
 
 #else
 int
-virProcessGetStatInfo(unsigned long long *cpuTime G_GNUC_UNUSED,
-                      int *lastCpu G_GNUC_UNUSED,
-                      long *vm_rss G_GNUC_UNUSED,
+virProcessGetStatInfo(unsigned long long *cpuTime,
+                      int *lastCpu,
+                      long *vm_rss,
                       pid_t pid G_GNUC_UNUSED,
                       pid_t tid G_GNUC_UNUSED)
 {
-    errno = ENOSYS;
-    return -1;
+    /* We don't have a way to collect this information on non-Linux
+     * platforms, so just report neutral values */
+    if (cpuTime)
+        *cpuTime = 0;
+    if (lastCpu)
+        *lastCpu = 0;
+    if (vm_rss)
+        *vm_rss = 0;
+
+    return 0;
 }
 
 int
-virProcessGetSchedInfo(unsigned long long *cpuWait G_GNUC_UNUSED,
+virProcessGetSchedInfo(unsigned long long *cpuWait,
                        pid_t pid G_GNUC_UNUSED,
                        pid_t tid G_GNUC_UNUSED)
 {
-    virReportSystemError(ENOSYS, "%s",
-                         _("scheduler information is not supported on this platform"));
-    return -1;
+    /* We don't have a way to collect this information on non-Linux
+     * platforms, so just report neutral values */
+    if (cpuWait)
+        *cpuWait = 0;
+
+    return 0;
 }
 #endif /* __linux__ */
-- 
2.35.1



More information about the libvir-list mailing list