From 6a40c01ed0da4054061ae6375d233340b38e89b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Fri, 22 Jan 2021 11:48:23 +0000 Subject: [PATCH] qemu: taint the VM if it is using a deprecated machine type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel P. Berrangé --- src/qemu/qemu_capabilities.c | 16 ++++++++++++++++ src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_domain.c | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 54c5896216..ce00edcb1c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2462,6 +2462,22 @@ virQEMUCapsIsCPUDeprecated(virQEMUCapsPtr qemuCaps, } +bool +virQEMUCapsIsMachineDeprecated(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + const char *machine) +{ + virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, type); + size_t i; + + for (i = 0; i < accel->nmachineTypes; i++) { + if (STREQ_NULLABLE(accel->machineTypes[i].name, machine)) + return accel->machineTypes[i].deprecated; + } + return false; +} + + bool virQEMUCapsGetMachineNumaMemSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 8b7eb0b06c..3e26365f12 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -690,6 +690,9 @@ const char *virQEMUCapsGetMachineDefaultCPU(virQEMUCapsPtr qemuCaps, bool virQEMUCapsIsCPUDeprecated(virQEMUCapsPtr qemuCaps, virDomainVirtType type, const char *model); +bool virQEMUCapsIsMachineDeprecated(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + const char *machine); bool virQEMUCapsGetMachineNumaMemSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, const char *name); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8a1785c2c3..9ae1dd2e26 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6274,6 +6274,24 @@ void qemuDomainObjTaintMsg(virQEMUDriverPtr driver, virErrorRestore(&orig_err); } +static void +qemuDomainObjCheckMachineTaint(virQEMUDriverPtr driver, + virDomainObjPtr obj, + qemuDomainLogContextPtr logCtxt) +{ + qemuDomainObjPrivatePtr priv = obj->privateData; + virQEMUCapsPtr qemuCaps = priv->qemuCaps; + + if (virQEMUCapsIsMachineDeprecated(qemuCaps, + obj->def->virtType, + obj->def->os.machine)) { + qemuDomainObjTaintMsg(driver, obj, VIR_DOMAIN_TAINT_DEPRECATED_CONFIG, logCtxt, + _("machine type '%s'"), + obj->def->os.machine); + } +} + + static void qemuDomainObjCheckCPUTaint(virQEMUDriverPtr driver, virDomainObjPtr obj, @@ -6338,6 +6356,8 @@ void qemuDomainObjCheckTaint(virQEMUDriverPtr driver, VIR_DOMAIN_TAINT_CUSTOM_HYPERVISOR_FEATURE, logCtxt); } + qemuDomainObjCheckMachineTaint(driver, obj, logCtxt); + if (obj->def->cpu) qemuDomainObjCheckCPUTaint(driver, obj, logCtxt, incomingMigration);