On 05/21/2018 06:13 PM, John Ferlan wrote:
On 05/15/2018 08:26 PM, Stefan Berger wrote:
> Implement functions for managing the storage of the external swtpm as well
> as starting and stopping it. Also implement functions to use swtpm_setup,
> which simulates the manufacturing of a TPM, which includes creation of
> certificates for the device.
>
> Further, the external TPM needs storage on the host that we need to set
> up before it can be run. We can clean up the host once the domain is
> undefined.
>
> This patch also implements a small layer for external device support that
> calls into the TPM device layer if a domain has an attached TPM. This is
> the layer we will wire up later on.
>
> Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
> ---
> src/qemu/Makefile.inc.am | 4 +
> src/qemu/qemu_domain.c | 2 +
> src/qemu/qemu_extdevice.c | 154 ++++++++++
> src/qemu/qemu_extdevice.h | 53 ++++
> src/qemu/qemu_migration.c | 3 +
> src/qemu/qemu_process.c | 12 +
> src/qemu/qemu_tpm.c | 751 ++++++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_tpm.h | 50 +++
> 8 files changed, 1029 insertions(+)
> create mode 100644 src/qemu/qemu_extdevice.c
> create mode 100644 src/qemu/qemu_extdevice.h
> create mode 100644 src/qemu/qemu_tpm.c
> create mode 100644 src/qemu/qemu_tpm.h
>
[...]
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index f753e42d1b..42e68f3ecb 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -39,6 +39,7 @@
> #include "qemu_hotplug.h"
> #include "qemu_blockjob.h"
> #include "qemu_security.h"
> +#include "qemu_extdevice.h"
>
> #include "domain_audit.h"
> #include "virlog.h"
> @@ -2917,6 +2918,7 @@ qemuMigrationSrcConfirm(virQEMUDriverPtr driver,
> if (!virDomainObjIsActive(vm)) {
> if (flags & VIR_MIGRATE_UNDEFINE_SOURCE) {
> virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
> + qemuExtDevicesCleanupHost(driver, vm->def);
I believe ^^ this ^^ will eventually get called by ...
> vm->persistent = 0;
> }
> qemuDomainRemoveInactiveJob(driver, vm);
... ^^ this ^^
qemuDomainRemoveInactiveJob calls qemuDomainRemoveInactive and seince
vm->persistent is not set, the call to qemuExtDevicesCleanupHost will be
done unconditionally.
IDC if it stays, but unless there's a reason to call this outside of a
job, maybe we should allow the RemoveInactiveJob to do the magic? Thoughts?
> @@ -4515,6 +4517,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver,
> if (!virDomainObjIsActive(vm) && ret == 0) {
> if (flags & VIR_MIGRATE_UNDEFINE_SOURCE) {
> virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
> + qemuExtDevicesCleanupHost(driver, vm->def);
Similar here.
Which then leaves just qemuDomainRemoveInactive doing that cleanup!
Right. Removed the unnecessary scrubbing calls.
> vm->persistent = 0;
> }
> qemuDomainRemoveInactiveJob(driver, vm);
Beyond that - looks good to me...
Reviewed-by: John Ferlan <jferlan(a)redhat.com>
Thanks.
John