[PATCH 1/1] virhostcpu.c: fix 'die' parsing for Power hosts

Daniel Henrique Barboza danielhb413 at gmail.com
Tue Mar 17 00:05:12 UTC 2020


Please disregard this patch. There is a bug in the logic:

On 3/16/20 6:53 PM, Daniel Henrique Barboza wrote:
> Commit 7b79ee2f78 makes assumptions about die_id parsing in
> the sysfs that aren't true for Power hosts. In both Power8
> and Power9 the die_id is set to -1:
> 

[...]

> --- a/src/util/virhostcpu.c
> +++ b/src/util/virhostcpu.c
> @@ -220,15 +220,20 @@ virHostCPUGetSocket(unsigned int cpu, unsigned int *socket)
>   int
>   virHostCPUGetDie(unsigned int cpu, unsigned int *die)
>   {
> -    int ret = virFileReadValueUint(die,
> -                                   "%s/cpu/cpu%u/topology/die_id",
> -                                   SYSFS_SYSTEM_PATH, cpu);
> +    int die_id;
> +    int ret = virFileReadValueInt(&die_id,
> +                                  "%s/cpu/cpu%u/topology/die_id",
> +                                  SYSFS_SYSTEM_PATH, cpu);
>   
> -    /* If the file is not there, it's 0 */
> -    if (ret == -2)
> +    /* If the file is not there, it's 0.
> +     * PowerPC hosts can report die_id = -1, which for our
> +     * case here it's the same as absent file. */
> +    if (ret == -2 || die_id < 0)


If 'ret == -1' we'll end up making a comparison with a bogus 'die_id'
value, which will be either uninitialized or invalid due to the parsing
error.

I fixed it in the v2.



DHB




More information about the libvir-list mailing list