]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Call virDomainDefGetShortName() less frequently
authorAndrea Bolognani <abologna@redhat.com>
Thu, 3 Feb 2022 19:06:04 +0000 (20:06 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Sat, 5 Feb 2022 13:36:11 +0000 (14:36 +0100)
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>
src/qemu/qemu_tpm.c

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