]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: Fix getting CPU frequency on Apple Silicon
authorAndrea Bolognani <abologna@redhat.com>
Thu, 10 Feb 2022 08:42:01 +0000 (09:42 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Mon, 14 Feb 2022 10:31:53 +0000 (11:31 +0100)
The hw.cpufrequency sysctl, which we use to obtain the CPU
frequency on macOS, is not available when running on Apple
Silicon, and as a consequence we currently report an error
whenever such information is requested.

The virNodeInfo.mhz field, where the CPU frequency gets stored,
is documented as being zero when the information could not be
obtained, and we already do that for Linux on aarch64. Extend
this behavior to macOS on Apple Silicon.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virhostcpu.c

index a07c00a0e9ca3bc407166501b95933aeb67bd5b0..011ef8a153a64dfb47767514f48b30075f44215b 100644 (file)
@@ -928,8 +928,14 @@ virHostCPUGetInfo(virArch hostarch G_GNUC_UNUSED,
     *mhz = cpu_freq;
 # else
     if (sysctlbyname("hw.cpufrequency", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) {
-        virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
-        return -1;
+        if (errno == ENOENT) {
+            /* The hw.cpufrequency sysctl is not implemented on Apple Silicon.
+             * In that case, we report 0 instead of erroring out */
+            cpu_freq = 0;
+        } else {
+            virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
+            return -1;
+        }
     }
 
     *mhz = cpu_freq / 1000000;