On 5/13/20 10:10 AM, Daniel Henrique Barboza wrote:
> 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.
>
> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> ---
> src/qemu/qemu_alias.c | 16 ++++++++++++++++
> src/qemu/qemu_command.c | 21 +++++++++++++++++++++
> 2 files changed, 37 insertions(+)
>
> diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
> index b0ea62af39..08fe5aa501 100644
> --- a/src/qemu/qemu_alias.c
> +++ b/src/qemu/qemu_alias.c
> @@ -413,6 +413,18 @@ qemuAssignDeviceTPMAlias(virDomainTPMDefPtr tpm,
> }
>
>
> +static int
> +qemuAssignDeviceTPMProxyAlias(virDomainTPMDefPtr tpmproxy,
> + int idx)
> +{
> + if (tpmproxy->info.alias)
> + return 0;
> +
> + tpmproxy->info.alias = g_strdup_printf("tpmproxy%d", idx);
> + return 0;
> +}
> +
> +
> int
> qemuAssignDeviceRedirdevAlias(virDomainDefPtr def,
> virDomainRedirdevDefPtr redirdev,
> @@ -673,6 +685,10 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
> if (qemuAssignDeviceTPMAlias(def->tpm, 0) < 0)
> return -1;
> }
> + if (def->tpmproxy) {
> + if (qemuAssignDeviceTPMProxyAlias(def->tpmproxy, 0) < 0)
> + return -1;
> + }
> for (i = 0; i < def->nmems; i++) {
> if (qemuAssignDeviceMemoryAlias(NULL, def->mems[i], false) < 0)
> return -1;
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index bfe70ed228..0b97db7388 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -8981,6 +8981,24 @@ qemuBuildTPMCommandLine(virCommandPtr cmd,
> return 0;
> }
>
> +static int
> +qemuBuildTPMProxyCommandLine(virCommandPtr cmd,
> + const virDomainDef *def)
> +{
> + const virDomainTPMDef *tpmproxy = def->tpmproxy;
> +
> + if (!tpmproxy)
> + return 0;
> +
> + virCommandAddArg(cmd, "-device");
> + virCommandAddArgFormat(cmd, "%s,id=%s,host-path=%s",
> + virDomainTPMModelTypeToString(tpmproxy->model),
> + tpmproxy->info.alias,
> + tpmproxy->data.passthrough.source.data.file.path);
> +
> + return 0;
> +}
> +
> static int
> qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd,
> virDomainSEVDefPtr sev)
> @@ -9662,6 +9680,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
> if (qemuBuildTPMCommandLine(cmd, def, qemuCaps) < 0)
> return NULL;
>
> + if (qemuBuildTPMProxyCommandLine(cmd, def) < 0)
> + return NULL;
> +
> if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0)
> return NULL;
>