[PATCH v3 2/4] qemu: Validate TCG feature is enabled only for TCG domains

Peter Krempa pkrempa at redhat.com
Mon Dec 13 15:30:58 UTC 2021


On Thu, Dec 02, 2021 at 09:53:34 +0100, Michal Privoznik wrote:
> After previous commit it's possible for domains to fine tune TCG
> features (well, just one - tb-cache). Check that domain has TCG
> enabled, otherwise the feature makes no sense.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  docs/formatdomain.rst    |  2 +-
>  src/qemu/qemu_validate.c | 16 ++++++++++++++++
>  2 files changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> index 041dfc699d..98eb7b7481 100644
> --- a/docs/formatdomain.rst
> +++ b/docs/formatdomain.rst
> @@ -2074,7 +2074,7 @@ are:
>     =========== ============================================== =================================================== ==============
>     Feature     Description                                    Value                                               Since
>     =========== ============================================== =================================================== ==============
> -   tb-cache    The size of translation block cache size       an integer                                          :since:`8.0.0`
> +   tb-cache    The size of translation block cache size       an integer (a multiple of MiB)                      :since:`8.0.0`
>     =========== ============================================== =================================================== ==============
>  
>  :anchor:`<a id="elementsTime"/>`
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index a7c89f27cf..3a1c279e63 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -295,6 +295,22 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
>              break;
>  
>          case VIR_DOMAIN_FEATURE_TCG:
> +            if (def->features[i] == VIR_TRISTATE_SWITCH_ON) {
> +                if (def->virtType != VIR_DOMAIN_VIRT_QEMU) {
> +                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                                   _("TCG features are incompatible with domain type '%s'"),
> +                                   virDomainVirtTypeToString(def->virtType));
> +                    return -1;
> +                }
> +
> +                if (def->tcg_features->tb_cache & 0xff) {

You are 2 bits off here. This won't catch increments of 0x100 KiB
(256KiB). You'll need 0x3FF as a mask and an explicit comparison with 0.

> +                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                                   _("tb-cache size must be an integer multiple of MiB"));
> +                    return -1;
> +                }
> +            }
> +            break;
> +
>          case VIR_DOMAIN_FEATURE_SMM:
>          case VIR_DOMAIN_FEATURE_KVM:
>          case VIR_DOMAIN_FEATURE_XEN:
> -- 
> 2.32.0
> 




More information about the libvir-list mailing list