Check for QMP query-tpm-models and set a capability flag. Do not use
this QMP command if it is not supported.
Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
---
src/qemu/qemu_capabilities.c | 8 ++++++++
src/qemu/qemu_capabilities.h | 1 +
2 files changed, 9 insertions(+)
Index: libvirt/src/qemu/qemu_capabilities.h
===================================================================
--- libvirt.orig/src/qemu/qemu_capabilities.h
+++ libvirt/src/qemu/qemu_capabilities.h
@@ -179,6 +179,7 @@ enum virQEMUCapsFlags {
QEMU_CAPS_MACHINE_USB_OPT = 137, /* -machine xxx,usb=on/off */
QEMU_CAPS_DEVICE_TPM_PASSTHROUGH = 138, /* -tpmdev passthrough */
QEMU_CAPS_DEVICE_TPM_TIS = 139, /* -device tpm_tis */
+ QEMU_CAPS_TPM_MODELS = 140, /* query-tpm-models QMP command */
QEMU_CAPS_LAST, /* this must always be the last
item */
};
Index: libvirt/src/qemu/qemu_capabilities.c
===================================================================
--- libvirt.orig/src/qemu/qemu_capabilities.c
+++ libvirt/src/qemu/qemu_capabilities.c
@@ -220,6 +220,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAS
"machine-usb-opt",
"tpm-passthrough",
"tpm-tis",
+
+ "query-tpm-models", /* 140 */
);
struct _virQEMUCaps {
@@ -1962,6 +1964,8 @@ virQEMUCapsProbeQMPCommands(virQEMUCapsP
virQEMUCapsSet(qemuCaps, QEMU_CAPS_ADD_FD);
else if (STREQ(name, "nbd-server-start"))
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NBD_SERVER);
+ else if (STREQ(name, "query-tpm-models"))
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_TPM_MODELS);
VIR_FREE(name);
}
VIR_FREE(commands);
@@ -2144,6 +2148,10 @@ virQEMUCapsProbeQMPTPM(virQEMUCapsPtr qe
{
int nentries, i;
char **entries = NULL;
+
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_TPM_MODELS))
+ return 0;
+
if ((nentries = qemuMonitorGetTPMModels(mon, &entries)) < 0)
return -1;