From b7621b7e96d01c9040fefdc31017ab38c2bc826a Mon Sep 17 00:00:00 2001
From: Pavel Fedin
Date: Wed, 30 Sep 2015 14:04:10 +0300
Subject: [PATCH] qemu: Add support for gic-version machine option
Support for GICv3 has been recently introduced in qemu using gic-version
option for the 'virt' machine. The option can actually take values of
'2', '3' and 'host', however, since in libvirt this is a numeric
parameter, we limit it only to 2 and 3. Value of 2 is not added to the
command line in order to keep backward compatibility with older qemu
versions.
Signed-off-by: Pavel Fedin
---
src/qemu/qemu_command.c | 44 +++++++++++++++++++++++++++++------------
1 file changed, 31 insertions(+), 13 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index bb1835c2f5..2f0f7d4693 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7702,19 +7702,6 @@ qemuBuildCpuArgStr(virQEMUDriverPtr driver,
have_cpu = true;
}
- if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) {
- if (def->gic_version && def->gic_version != 2) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("gic version '%u' is not supported"),
- def->gic_version);
- goto cleanup;
- }
-
- /* There's no command line argument currently to turn on/off GIC. It's
- * done automatically by qemu-system-aarch64. But if this changes, lets
- * put the code here. */
- }
-
if (virBufferCheckError(&buf) < 0)
goto cleanup;
@@ -7931,6 +7918,37 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
return -1;
}
+ if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) {
+ if (def->gic_version) {
+ if ((def->os.arch != VIR_ARCH_ARMV7L &&
+ def->os.arch != VIR_ARCH_AARCH64) ||
+ (STRNEQ(def->os.machine, "virt") &&
+ !STRPREFIX(def->os.machine, "virt-"))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("gic-version option is available "
+ "only for ARM virt machine"));
+ virBufferFreeAndReset(&buf);
+ return -1;
+ }
+
+ /* 2 is the default, so we don't put it as option for
+ * backwards compatibility
+ */
+ if (def->gic_version != 2) {
+ if (!virQEMUCapsGet(qemuCaps,
+ QEMU_CAPS_MACH_VIRT_GIC_VERSION)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("gic-version option is not available "
+ "with this QEMU binary"));
+ virBufferFreeAndReset(&buf);
+ return -1;
+ }
+
+ virBufferAsprintf(&buf, ",gic-version=%d", def->gic_version);
+ }
+ }
+ }
+
virCommandAddArgBuffer(cmd, &buf);
}
--
GitLab