Tiago Espinha Gasiba wrote:

> From: Tiago Gasiba <[email protected]>
> 
> From: Tiago Gasiba <[email protected]>
> 
> Signed-off-by: Tiago Espinha Gasiba <[email protected]>
> ---
>  src/util/virhostcpu.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
> index f2b25e940b..b602592fb7 100644
> --- a/src/util/virhostcpu.c
> +++ b/src/util/virhostcpu.c
> @@ -993,8 +993,8 @@ virHostCPUGetInfo(virArch hostarch G_GNUC_UNUSED,
>  
>      if (sysctlbyname("dev.cpu.0.freq", &cpu_freq, &cpu_freq_len, NULL, 0) < 
> 0) {
>          if (sysctlbyname("hw.clockrate", &cpu_freq, &cpu_freq_len, NULL, 0) 
> < 0) {
> -            virReportSystemError(errno, "%s", _("cannot obtain CPU freq"));
> -            return -1;
> +            VIR_WARN("cannot obtain CPU freq, setting to 0");
> +            cpu_freq = 0;
>          }
>      }
>  

Merge request provides more details on this issue:
https://gitlab.com/libvirt/libvirt/-/merge_requests/553.

Apparently, calling virReportSystemError() from virHostCPUGetInfo() is
not desired. This function is used by drivers to implement
virNodeGetInfo(), so raising error here prevents from using the
virNodeGetInfo() API. This leads to other issues, e.g. virt-manager
fails to connect to the driver if virNodeGetInfo() errors out.

Falling back to CPU frequency 0 if it cannot be obtained looks like a
sane option. In theory, it could cause division by 0, but in practice it
does not seem that cpu frequency could be used as a divisor.

virt-manager does not seem to actually use CPU frequency it gets from
virNodeGetInfo(). And virsh prints out CPU frequency only if it is not
zero.

Having that said:

Reviewed-by: Roman Bogorodskiy <[email protected]>

I'll wait a few days before pushing in case if anyone has objects to
this fallback behavior.

Reply via email to