diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index ca4d4c1a40..073001607e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2701,7 +2701,7 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, } -static bool +bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, const char *canonical_machine) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ca7612ebfc..56af9e9a0e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -631,6 +631,10 @@ bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, const char *name); +bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, + const char *canonical_machine) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps, virDomainVirtType virtType, const char *name); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 50b116445a..3005790225 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5727,6 +5727,14 @@ qemuDomainDefValidate(const virDomainDef *def, goto cleanup; } + if (qemuCaps && + !virQEMUCapsIsMachineSupported(qemuCaps, def->virtType, def->os.machine)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Emulator '%s' does not support machine type '%s'"), + def->emulator, def->os.machine); + goto cleanup; + } + if (def->mem.min_guarantee) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Parameter 'min_guarantee' not supported by QEMU."));