This patch wraps it up all the wiring done in previous patches,
enabling a PPC64 guest to launch a guest using a TPM Proxy
device.
Note that device validation is already being done in qemu_validate.c,
qemuValidateDomainDeviceDefTPM(), on domain define time. We don't
need to verify QEMU capabilities for this device again inside
qemu_command.c.
Reviewed-by: Stefan Berger <stefanb(a)linux.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
src/qemu/qemu_alias.c | 5 ++++-
src/qemu/qemu_command.c | 27 ++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
index 85fdb85940..bb7145d630 100644
--- a/src/qemu/qemu_alias.c
+++ b/src/qemu/qemu_alias.c
@@ -408,7 +408,10 @@ qemuAssignDeviceTPMAlias(virDomainTPMDefPtr tpm,
if (tpm->info.alias)
return 0;
- tpm->info.alias = g_strdup_printf("tpm%d", idx);
+ if (tpm->model == VIR_DOMAIN_TPM_MODEL_SPAPR_PROXY)
+ tpm->info.alias = g_strdup_printf("tpmproxy%d", idx);
+ else
+ tpm->info.alias = g_strdup_printf("tpm%d", idx);
return 0;
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 59caff08f2..ab3828ec57 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9039,6 +9039,26 @@ qemuBuildTPMCommandLine(virCommandPtr cmd,
}
+static int
+qemuBuildTPMProxyCommandLine(virCommandPtr cmd,
+ virDomainTPMDefPtr tpm)
+{
+ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+ const char *filePath = NULL;
+
+ filePath = tpm->data.passthrough.source.data.file.path;
+
+ virCommandAddArg(cmd, "-device");
+ virBufferAsprintf(&buf, "%s,id=%s,host-path=",
+ virDomainTPMModelTypeToString(tpm->model),
+ tpm->info.alias);
+ virQEMUBuildBufferEscapeComma(&buf, filePath);
+ virCommandAddArgBuffer(cmd, &buf);
+
+ return 0;
+}
+
+
static int
qemuBuildTPMsCommandLine(virCommandPtr cmd,
const virDomainDef *def,
@@ -9047,8 +9067,13 @@ qemuBuildTPMsCommandLine(virCommandPtr cmd,
size_t i;
for (i = 0; i < def->ntpms; i++) {
- if (qemuBuildTPMCommandLine(cmd, def, def->tpms[i], qemuCaps) < 0)
+ if (def->tpms[i]->model == VIR_DOMAIN_TPM_MODEL_SPAPR_PROXY) {
+ if (qemuBuildTPMProxyCommandLine(cmd, def->tpms[i]) < 0)
+ return -1;
+ } else if (qemuBuildTPMCommandLine(cmd, def,
+ def->tpms[i], qemuCaps) < 0) {
return -1;
+ }
}
return 0;
--
2.26.2