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(a)redhat.com>
--
Andrea Bolognani / Red Hat / Virtualization