[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