mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-09 13:57:27 +03:00
qemu_tpm: Make APIs work over a single virDomainTPMDef
In qemu_extdevice.c lives code that handles helper daemons that are required for some types of devices (e.g. virtiofsd, vhost-user-gpu, swtpm, etc.). These devices have their own handling code in separate files, with only a very basic functions exposed (e.g. for starting/stopping helper process, placing it into given CGroup, etc.). And these functions all work over a single instance of device (virDomainVideoDef *, virDomainFSDef *, etc.), except for TPM handling code which takes virDomainDef * and iterates over it inside its module. Remove this oddness and make qemuExtTPM*() functions look closer to the rest of the code. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
3663a7d48c
commit
1c23123732
@ -73,8 +73,15 @@ static int
|
||||
qemuExtDevicesInitPaths(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
{
|
||||
if (def->ntpms > 0)
|
||||
return qemuExtTPMInitPaths(driver, def);
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
virDomainTPMDef *tpm = def->tpms[i];
|
||||
|
||||
if (tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR &&
|
||||
qemuExtTPMInitPaths(driver, def, tpm) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -130,13 +137,18 @@ qemuExtDevicesPrepareHost(virQEMUDriver *driver,
|
||||
virDomainObj *vm)
|
||||
{
|
||||
virDomainDef *def = vm->def;
|
||||
size_t i;
|
||||
|
||||
if (qemuExtDevicesInitPaths(driver, def) < 0)
|
||||
return -1;
|
||||
|
||||
if (def->ntpms > 0 &&
|
||||
qemuExtTPMPrepareHost(driver, def) < 0)
|
||||
return -1;
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
virDomainTPMDef *tpm = def->tpms[i];
|
||||
|
||||
if (tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR &&
|
||||
qemuExtTPMPrepareHost(driver, def, tpm) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -146,11 +158,14 @@ void
|
||||
qemuExtDevicesCleanupHost(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (qemuExtDevicesInitPaths(driver, def) < 0)
|
||||
return;
|
||||
|
||||
if (def->ntpms > 0)
|
||||
qemuExtTPMCleanupHost(def);
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
qemuExtTPMCleanupHost(def->tpms[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -171,8 +186,13 @@ qemuExtDevicesStart(virQEMUDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
if (def->ntpms > 0 && qemuExtTPMStart(driver, vm, incomingMigration) < 0)
|
||||
return -1;
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
virDomainTPMDef *tpm = def->tpms[i];
|
||||
|
||||
if (tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR &&
|
||||
qemuExtTPMStart(driver, vm, tpm, incomingMigration) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
virDomainNetDef *net = def->nets[i];
|
||||
@ -224,8 +244,10 @@ qemuExtDevicesStop(virQEMUDriver *driver,
|
||||
qemuExtVhostUserGPUStop(driver, vm, video);
|
||||
}
|
||||
|
||||
if (def->ntpms > 0)
|
||||
qemuExtTPMStop(driver, vm);
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type == VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
qemuExtTPMStop(driver, vm);
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
virDomainNetDef *net = def->nets[i];
|
||||
@ -301,9 +323,11 @@ qemuExtDevicesSetupCgroup(virQEMUDriver *driver,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (def->ntpms > 0 &&
|
||||
qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
|
||||
return -1;
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type == VIR_DOMAIN_TPM_TYPE_EMULATOR &&
|
||||
qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nfss; i++) {
|
||||
virDomainFSDef *fs = def->fss[i];
|
||||
|
@ -971,86 +971,59 @@ qemuTPMEmulatorStart(virQEMUDriver *driver,
|
||||
|
||||
int
|
||||
qemuExtTPMInitPaths(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
virDomainDef *def,
|
||||
virDomainTPMDef *tpm)
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
return qemuTPMEmulatorInitPaths(def->tpms[i],
|
||||
cfg->swtpmStorageDir,
|
||||
cfg->swtpmLogDir,
|
||||
def->name,
|
||||
def->uuid);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return qemuTPMEmulatorInitPaths(tpm,
|
||||
cfg->swtpmStorageDir,
|
||||
cfg->swtpmLogDir,
|
||||
def->name,
|
||||
def->uuid);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuExtTPMPrepareHost(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
virDomainDef *def,
|
||||
virDomainTPMDef *tpm)
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
g_autofree char *shortName = virDomainDefGetShortName(def);
|
||||
size_t i;
|
||||
|
||||
if (!shortName)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
return qemuTPMEmulatorPrepareHost(def->tpms[i], cfg->swtpmLogDir,
|
||||
cfg->swtpm_user,
|
||||
cfg->swtpm_group,
|
||||
cfg->swtpmStateDir, cfg->user,
|
||||
shortName);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return qemuTPMEmulatorPrepareHost(tpm,
|
||||
cfg->swtpmLogDir,
|
||||
cfg->swtpm_user,
|
||||
cfg->swtpm_group,
|
||||
cfg->swtpmStateDir,
|
||||
cfg->user,
|
||||
shortName);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuExtTPMCleanupHost(virDomainDef *def)
|
||||
qemuExtTPMCleanupHost(virDomainTPMDef *tpm)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
qemuTPMEmulatorCleanupHost(def->tpms[i]);
|
||||
}
|
||||
qemuTPMEmulatorCleanupHost(tpm);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuExtTPMStart(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
virDomainTPMDef *tpm,
|
||||
bool incomingMigration)
|
||||
{
|
||||
g_autofree char *shortName = virDomainDefGetShortName(vm->def);
|
||||
size_t i;
|
||||
|
||||
if (!shortName)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < vm->def->ntpms; i++) {
|
||||
if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
return qemuTPMEmulatorStart(driver, vm, shortName, vm->def->tpms[i],
|
||||
incomingMigration);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return qemuTPMEmulatorStart(driver, vm, shortName, tpm, incomingMigration);
|
||||
}
|
||||
|
||||
|
||||
@ -1060,20 +1033,12 @@ qemuExtTPMStop(virQEMUDriver *driver,
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
g_autofree char *shortName = virDomainDefGetShortName(vm->def);
|
||||
size_t i;
|
||||
|
||||
if (!shortName)
|
||||
return;
|
||||
|
||||
for (i = 0; i < vm->def->ntpms; i++) {
|
||||
if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
qemuTPMEmulatorStop(cfg->swtpmStateDir, shortName);
|
||||
qemuSecurityCleanupTPMEmulator(driver, vm);
|
||||
}
|
||||
|
||||
return;
|
||||
qemuTPMEmulatorStop(cfg->swtpmStateDir, shortName);
|
||||
qemuSecurityCleanupTPMEmulator(driver, vm);
|
||||
}
|
||||
|
||||
|
||||
@ -1084,18 +1049,12 @@ qemuExtTPMSetupCgroup(virQEMUDriver *driver,
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
g_autofree char *shortName = virDomainDefGetShortName(def);
|
||||
size_t i;
|
||||
|
||||
if (!shortName)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < def->ntpms; i++) {
|
||||
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
|
||||
continue;
|
||||
|
||||
if (qemuExtTPMEmulatorSetupCgroup(cfg->swtpmStateDir, shortName, cgroup) < 0)
|
||||
return -1;
|
||||
}
|
||||
if (qemuExtTPMEmulatorSetupCgroup(cfg->swtpmStateDir, shortName, cgroup) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -23,22 +23,27 @@
|
||||
#include "vircommand.h"
|
||||
|
||||
int qemuExtTPMInitPaths(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
virDomainDef *def,
|
||||
virDomainTPMDef *tpm)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
||||
G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
int qemuExtTPMPrepareHost(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
virDomainDef *def,
|
||||
virDomainTPMDef *tpm)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
||||
ATTRIBUTE_NONNULL(3)
|
||||
G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
void qemuExtTPMCleanupHost(virDomainDef *def)
|
||||
void qemuExtTPMCleanupHost(virDomainTPMDef *tpm)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
int qemuExtTPMStart(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
virDomainTPMDef *def,
|
||||
bool incomingMigration)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
|
||||
ATTRIBUTE_NONNULL(3)
|
||||
G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
void qemuExtTPMStop(virQEMUDriver *driver,
|
||||
|
Loading…
x
Reference in New Issue
Block a user