
On Thu, 2017-05-18 at 11:09 +0200, Ján Tomko wrote:
This option turns on extended interrupt mode, which allows more than 255 vCPUs. https://bugzilla.redhat.com/show_bug.cgi?id=1451282 --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 11 +++++++++++ src/qemu/qemu_domain.c | 20 ++++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 1 + .../qemuxml2argv-intel-iommu-eim.args | 19 +++++++++++++++++++ tests/qemuxml2argvtest.c | 7 +++++++ 8 files changed, 62 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-eim.args
[...]
@@ -2663,6 +2663,9 @@ qemuDomainRecheckInternalPaths(virDomainDefPtr def, } +#define QEMU_MAX_VCPUS_WITHOUT_EIM 255
This define is very far from the code that actually uses it, can you please move it right before qemuDomainDefValidate()? You could even...
+ + static int qemuDomainDefVcpusPostParse(virDomainDefPtr def) { @@ -3071,6 +3074,23 @@ qemuDomainDefValidate(const virDomainDef *def, } }
... define it here, and...
+ if (ARCH_IS_X86(def->os.arch) && + virDomainDefGetVcpusMax(def) > QEMU_MAX_VCPUS_WITHOUT_EIM) { + if (!qemuDomainIsQ35(def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("more than %d vCPUs are only supported on " + "q35-based machine types"), + QEMU_MAX_VCPUS_WITHOUT_EIM); + goto cleanup; + } + if (!def->iommu || def->iommu->eim != VIR_TRISTATE_SWITCH_ON) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("more than %d vCPUs require extended interrupt " + "mode enabled on the iommu device"), + QEMU_MAX_VCPUS_WITHOUT_EIM); + } + }
.. undefine it here. Either solution is fine with me. Reviewed-by: Andrea Bolognani <abologna@redhat.com> -- Andrea Bolognani / Red Hat / Virtualization