From 45f83e3a0bc62beea19f837af243f1d20b629c88 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 24 Nov 2021 13:30:19 +0000 Subject: [PATCH] util: pull TPM capabilities probing out of main init method MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Many methods merely want to know that the swtpm binaries have been found, and don't care about probing for capabilities. Even when starting a guest, the QEMU driver may not need the capabilities. Skipping probing ensures the VM startup path is as fast as possible when capabilities are not required. It also removes various error scenarios from the main init method. Reviewed-by: Ján Tomko Signed-off-by: Daniel P. Berrangé --- src/util/virtpm.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/util/virtpm.c b/src/util/virtpm.c index 7e75c74d67..ec51c0efb3 100644 --- a/src/util/virtpm.c +++ b/src/util/virtpm.c @@ -310,14 +310,8 @@ virTPMEmulatorInit(void) return -1; } swtpmBinaries[i].path = g_steal_pointer(&path); - - if (swtpmBinaries[i].capsParse) { - swtpmBinaries[i].caps = virTPMGetCaps(swtpmBinaries[i].capsParse, - swtpmBinaries[i].path, - swtpmBinaries[i].parm); - if (!swtpmBinaries[i].caps) - return -1; - } + virBitmapFree(swtpmBinaries[i].caps); + swtpmBinaries[i].caps = NULL; } } @@ -334,7 +328,16 @@ virTPMBinaryGetCaps(virTPMBinary binary, if (virTPMEmulatorInit() < 0) goto cleanup; - ret = virBitmapIsBitSet(swtpmBinaries[binary].caps, cap); + + if (!swtpmBinaries[binary].caps && + swtpmBinaries[binary].capsParse) { + swtpmBinaries[binary].caps = virTPMGetCaps( + swtpmBinaries[binary].capsParse, + swtpmBinaries[binary].path, + swtpmBinaries[binary].parm); + } + if (swtpmBinaries[binary].caps) + ret = virBitmapIsBitSet(swtpmBinaries[binary].caps, cap); cleanup: virMutexUnlock(&swtpm_tools_lock); -- 2.47.2