From 16159d51524dd941f88031d0b50714a5b99cd2c2 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 30 Nov 2021 13:37:54 +0100 Subject: [PATCH] qemu: Validate TCG feature is enabled only for TCG domains 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 Reviewed-by: Peter Krempa --- 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:`` diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 2c9ccbd4fd..5592c99f3b 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 & 0x3ff) != 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: