Re: [PATCH 11/32] sync_qemu_models_i386: Copy signatures from base model

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 19, 2024 at 07:49:47PM +0100, Jiri Denemark wrote:
> The signatures in the CPU map are used for matching physical CPUs and
> thus we need to cover all possible real world variants we know about.
> When adding a new version of an existing CPU model, we should copy the
> signature(s) of the existing model rather than replacing it with the
> signature that QEMU uses.

Also sanity check that the signature QEMU uses is part of
libvirt's existing recorded signature list ?

> 
> Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
> ---
>  src/cpu_map/sync_qemu_models_i386.py | 46 ++++++++++++++++++++++++----
>  1 file changed, 40 insertions(+), 6 deletions(-)
> 
> diff --git a/src/cpu_map/sync_qemu_models_i386.py b/src/cpu_map/sync_qemu_models_i386.py
> index 40d71e66be..9b7cb8a047 100755
> --- a/src/cpu_map/sync_qemu_models_i386.py
> +++ b/src/cpu_map/sync_qemu_models_i386.py
> @@ -429,7 +429,30 @@ def transform(item):
>      raise RuntimeError("unexpected item type")
>  
>  
> -def expand_model(model):
> +def get_signature(outdir, model):
> +    file = os.path.join(outdir, f"x86_{model}.xml")
> +
> +    if not os.path.isfile(file):
> +        return None
> +
> +    xml = lxml.etree.parse(file)
> +
> +    signature = []
> +    for sig in xml.xpath("//signature"):
> +        attr = sig.attrib
> +        family = attr["family"]
> +        model = attr["model"]
> +        if "stepping" in attr:
> +            stepping = attr["stepping"]
> +        else:
> +            stepping = None
> +
> +        signature.append((family, model, stepping))
> +
> +    return signature
> +
> +
> +def expand_model(outdir, model):
>      """Expand a qemu cpu model description that has its feature split up into
>      different fields and may have differing versions into several libvirt-
>      friendly cpu models."""
> @@ -438,11 +461,14 @@ def expand_model(model):
>          "name": model.pop(".name"),
>          "vendor": translate_vendor(model.pop(".vendor")),
>          "features": set(),
> -        "extra": dict()}
> +        "extra": dict(),
> +        "signature": list(),
> +    }
>  
>      if ".family" in model and ".model" in model:
> -        result["family"] = model.pop(".family")
> -        result["model"] = model.pop(".model")
> +        result["signature"].append((model.pop(".family"),
> +                                    model.pop(".model"),
> +                                    None))
>  
>      for k in [k for k in model if k.startswith(".features")]:
>          v = model.pop(k)
> @@ -469,6 +495,10 @@ def expand_model(model):
>          if not alias and ver == 1:
>              alias = name
>  
> +            sig = get_signature(outdir, name)
> +            if sig:

Assert here that 'result["signature"' is part of 'sig',
before replacing it ?

> +                result["signature"] = sig



With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux