qemu: Call virDomainDefGetShortName() less frequently

When looping over TPM devices for a domain, we can avoid calling
this function for each iteration and call it once per domain
instead.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
Andrea Bolognani 2022-02-03 20:06:04 +01:00
parent f3a40a7d20
commit a0dedd64d4

View File

@ -869,17 +869,16 @@ qemuExtTPMPrepareHost(virQEMUDriver *driver,
virDomainDef *def) virDomainDef *def)
{ {
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
g_autofree char *shortName = NULL; g_autofree char *shortName = virDomainDefGetShortName(def);
size_t i; size_t i;
if (!shortName)
return -1;
for (i = 0; i < def->ntpms; i++) { for (i = 0; i < def->ntpms; i++) {
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR) if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
continue; continue;
shortName = virDomainDefGetShortName(def);
if (!shortName)
return -1;
return qemuTPMEmulatorPrepareHost(def->tpms[i], cfg->swtpmLogDir, return qemuTPMEmulatorPrepareHost(def->tpms[i], cfg->swtpmLogDir,
cfg->swtpm_user, cfg->swtpm_user,
cfg->swtpm_group, cfg->swtpm_group,
@ -910,6 +909,7 @@ qemuExtTPMCleanupHost(virDomainDef *def)
* @driver: QEMU driver * @driver: QEMU driver
* @vm: the domain object * @vm: the domain object
* @tpm: TPM definition * @tpm: TPM definition
* @shortName: short and unique name of the domain
* @incomingMigration: whether we have an incoming migration * @incomingMigration: whether we have an incoming migration
* *
* Start the external TPM Emulator: * Start the external TPM Emulator:
@ -919,22 +919,19 @@ qemuExtTPMCleanupHost(virDomainDef *def)
static int static int
qemuTPMEmulatorStart(virQEMUDriver *driver, qemuTPMEmulatorStart(virQEMUDriver *driver,
virDomainObj *vm, virDomainObj *vm,
const char *shortName,
virDomainTPMDef *tpm, virDomainTPMDef *tpm,
bool incomingMigration) bool incomingMigration)
{ {
g_autoptr(virCommand) cmd = NULL; g_autoptr(virCommand) cmd = NULL;
VIR_AUTOCLOSE errfd = -1; VIR_AUTOCLOSE errfd = -1;
g_autoptr(virQEMUDriverConfig) cfg = NULL; g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autofree char *shortName = virDomainDefGetShortName(vm->def);
g_autofree char *pidfile = NULL; g_autofree char *pidfile = NULL;
virTimeBackOffVar timebackoff; virTimeBackOffVar timebackoff;
const unsigned long long timeout = 1000; /* ms */ const unsigned long long timeout = 1000; /* ms */
int cmdret = 0; int cmdret = 0;
pid_t pid = -1; pid_t pid = -1;
if (!shortName)
return -1;
cfg = virQEMUDriverGetConfig(driver); cfg = virQEMUDriverGetConfig(driver);
/* stop any left-over TPM emulator for this VM */ /* stop any left-over TPM emulator for this VM */
@ -1018,13 +1015,17 @@ qemuExtTPMStart(virQEMUDriver *driver,
virDomainObj *vm, virDomainObj *vm,
bool incomingMigration) bool incomingMigration)
{ {
g_autofree char *shortName = virDomainDefGetShortName(vm->def);
size_t i; size_t i;
if (!shortName)
return -1;
for (i = 0; i < vm->def->ntpms; i++) { for (i = 0; i < vm->def->ntpms; i++) {
if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR) if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
continue; continue;
return qemuTPMEmulatorStart(driver, vm, vm->def->tpms[i], return qemuTPMEmulatorStart(driver, vm, shortName, vm->def->tpms[i],
incomingMigration); incomingMigration);
} }
@ -1037,18 +1038,16 @@ qemuExtTPMStop(virQEMUDriver *driver,
virDomainObj *vm) virDomainObj *vm)
{ {
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
g_autofree char *shortName = virDomainDefGetShortName(vm->def);
size_t i; size_t i;
for (i = 0; i < vm->def->ntpms; i++) { if (!shortName)
g_autofree char *shortName = NULL; return;
for (i = 0; i < vm->def->ntpms; i++) {
if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR) if (vm->def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
continue; continue;
shortName = virDomainDefGetShortName(vm->def);
if (!shortName)
return;
qemuTPMEmulatorStop(cfg->swtpmStateDir, shortName); qemuTPMEmulatorStop(cfg->swtpmStateDir, shortName);
qemuSecurityCleanupTPMEmulator(driver, vm); qemuSecurityCleanupTPMEmulator(driver, vm);
} }
@ -1063,18 +1062,16 @@ qemuExtTPMSetupCgroup(virQEMUDriver *driver,
virCgroup *cgroup) virCgroup *cgroup)
{ {
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
g_autofree char *shortName = virDomainDefGetShortName(def);
size_t i; size_t i;
for (i = 0; i < def->ntpms; i++) { if (!shortName)
g_autofree char *shortName = NULL; return -1;
for (i = 0; i < def->ntpms; i++) {
if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR) if (def->tpms[i]->type != VIR_DOMAIN_TPM_TYPE_EMULATOR)
continue; continue;
shortName = virDomainDefGetShortName(def);
if (!shortName)
return -1;
if (qemuExtTPMEmulatorSetupCgroup(cfg->swtpmStateDir, shortName, cgroup) < 0) if (qemuExtTPMEmulatorSetupCgroup(cfg->swtpmStateDir, shortName, cgroup) < 0)
return -1; return -1;
} }