[libvirt] [PATCH] util: hostcpu: improve CPU freq code for FreeBSD
Michal Privoznik
mprivozn at redhat.com
Tue Sep 6 14:20:11 UTC 2016
On 31.08.2016 07:14, Roman Bogorodskiy wrote:
> Current implementation uses the dev.cpu.0.freq sysctl that is
> provided by the cpufreq(4) framework and returns the actual
> CPU frequency. However, there are environment where it's not available,
> e.g. when running nested in KVM. In this case fall back to hw.clockrate
> that reports CPU frequency at the boot time.
>
> Resolves (hopefully):
> https://bugzilla.redhat.com/show_bug.cgi?id=1369964
> ---
> src/util/virhostcpu.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
> index 0f03ff8..b5a37a8 100644
> --- a/src/util/virhostcpu.c
> +++ b/src/util/virhostcpu.c
> @@ -994,9 +994,16 @@ virHostCPUGetInfo(virArch hostarch ATTRIBUTE_UNUSED,
> *threads = 1;
>
> # ifdef __FreeBSD__
> + /* dev.cpu.%d.freq reports current active CPU frequency. It is provided by
> + * the cpufreq(4) framework. However, it might be disabled or no driver
> + * available. In this case fallback to "hw.clockrate" which reports boot time
> + * CPU frequency. */
> +
> if (sysctlbyname("dev.cpu.0.freq", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) {
> - virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
> - return -1;
> + if (sysctlbyname("hw.clockrate", &cpu_freq, &cpu_freq_len, NULL, 0) < 0) {
> + virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
> + return -1;
> + }
> }
>
> *mhz = cpu_freq;
>
ACK
Michal
More information about the libvir-list
mailing list