[libvirt] [PATCH v2] host-validate: Improve CPU flags processing

Ján Tomko jtomko at redhat.com
Tue Apr 5 10:35:25 UTC 2016


On Thu, Mar 31, 2016 at 05:26:10PM +0200, Andrea Bolognani wrote:
> Instead of relying on substring search, tokenize the input
> and process each CPU flag separately. This ensures CPU flag
> detection will continue to work correctly even if we start
> looking for CPU flags whose name might appear as part of
> other CPU flags' names.
> 
> The result of processing is stored in a virBitmap, which
> means we don't have to parse /proc/cpuinfo in its entirety
> for each single CPU flag we want to check.
> 
> Moreover, use of the newly-introduced virHostValidateCPUFlag
> enumeration ensures we don't go looking for random CPU flags
> which might actually be simple typos.

You could still put the typo in the enum impelmentation :)

> ---
> Changes in v2:
> 
>   * use virStringSplitCount() and STRPREFIX() instead of
>     strtok_r() and strcmp(), as suggested by Peter
> 
>  tools/virt-host-validate-common.c | 67 ++++++++++++++++++++++++++++++++-------
>  tools/virt-host-validate-common.h | 13 +++++++-
>  tools/virt-host-validate-qemu.c   | 12 +++++--
>  3 files changed, 77 insertions(+), 15 deletions(-)
> 

ACK

> +        /* Split the line using " " as a delimiter. The first token
> +         * will always be ":", but that's okay */
> +        if (!(tokens = virStringSplitCount(start, " ", 0, &ntokens)))
> +            continue;
> +
> +        /* Go through all flags and check whether one of those we
> +         * might want to check for later on is present; if that's
> +         * the case, set the relevant bit in the bitmap */
> +        for (i = 0; i < ntokens; i++) {
> +            int value;
> +
> +            if ((value = virHostValidateCPUFlagTypeFromString(tokens[i])) >= 0)
> +                ignore_value(virBitmapSetBit(flags, value));
>          }
> +
> +        virStringFreeListCount(tokens, ntokens);
>      } while (1);

We have already found the first 'flags' or 'Features' and parsed all the
features. I doubt different processors on the system would have
different features so I'd just use while (0) here.

Jan




More information about the libvir-list mailing list