Skip to contentSkip to conversation

tpm: move qdev_prop_tpm to hw/tpm/

PATCH In review Cornelia Huck 3 participants 3 messages Dec 18, 2017

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 tpm: move qdev_prop_tpm to hw/tpm/

Building with --disable-tpm yields

../hw/core/qdev-properties-system.o: In function `set_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:274: undefined reference to qemu_find_tpm_be' /home/cohuck/git/qemu/hw/core/qdev-properties-system.c:278: undefined reference to tpm_backend_init' ../hw/core/qdev-properties-system.o: In function `release_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:291: undefined reference to `tpm_backend_reset'

Move the implementation of DEFINE_PROP_TPMBE to hw/tpm/ so that it is only built when tpm is actually configured, and build tpm_util in every case.

Fixes 493b78303532 ("qdev: add DEFINE_PROP_TPMBE")

---
v1->v2: fix x86_64 build with mingw (always build tpm_util)

---
 hw/core/qdev-properties-system.c | 64 --------------------------------------
 hw/tpm/Makefile.objs             |  5 +--
 hw/tpm/tpm_util.c                | 67 ++++++++++++++++++++++++++++++++++++++++
 hw/tpm/tpm_util.h                |  3 ++
 include/hw/qdev-properties.h     |  2 --
 5 files changed, 73 insertions(+), 68 deletions(-)
hw/core/qdev-properties-system.c +0 -64
index c17364655c..ec10da7424 100644
@@ -21,7 +21,6 @@
 #include "net/hub.h"
 #include "qapi/visitor.h"
 #include "chardev/char-fe.h"
-#include "sysemu/tpm_backend.h"
 #include "sysemu/iothread.h"
 
 static void get_pointer(Object *obj, Visitor *v, Property *prop,
@@ -237,69 +236,6 @@ const PropertyInfo qdev_prop_chr = {
     .release = release_chr,
 };
 
-/* --- character device --- */
-
-static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
-                    Error **errp)
-{
-    DeviceState *dev = DEVICE(obj);
-    TPMBackend **be = qdev_get_prop_ptr(dev, opaque);
-    char *p;
-
-    p = g_strdup(*be ? (*be)->id : "");
-    visit_type_str(v, name, &p, errp);
-    g_free(p);
-}
-
-static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
-                    Error **errp)
-{
-    DeviceState *dev = DEVICE(obj);
-    Error *local_err = NULL;
-    Property *prop = opaque;
-    TPMBackend *s, **be = qdev_get_prop_ptr(dev, prop);
-    char *str;
-
-    if (dev->realized) {
-        qdev_prop_set_after_realize(dev, name, errp);
-        return;
-    }
-
-    visit_type_str(v, name, &str, &local_err);
-    if (local_err) {
-        error_propagate(errp, local_err);
-        return;
-    }
-
-    s = qemu_find_tpm_be(str);
-    if (s == NULL) {
-        error_setg(errp, "Property '%s.%s' can't find value '%s'",
-                   object_get_typename(obj), prop->name, str);
-    } else if (tpm_backend_init(s, TPM_IF(obj), errp) == 0) {
-        *be = s; /* weak reference, avoid cyclic ref */
-    }
-    g_free(str);
-}
-
-static void release_tpm(Object *obj, const char *name, void *opaque)
-{
-    DeviceState *dev = DEVICE(obj);
-    Property *prop = opaque;
-    TPMBackend **be = qdev_get_prop_ptr(dev, prop);
-
-    if (*be) {
-        tpm_backend_reset(*be);
-    }
-}
-
-const PropertyInfo qdev_prop_tpm = {
-    .name  = "str",
-    .description = "ID of a tpm to use as a backend",
-    .get   = get_tpm,
-    .set   = set_tpm,
-    .release = release_tpm,
-};
-
 /* --- netdev device --- */
 static void get_netdev(Object *obj, Visitor *v, const char *name,
                        void *opaque, Error **errp)
hw/tpm/Makefile.objs +3 -2
index 41f0b7a590..7a93b24636 100644
@@ -1,3 +1,4 @@
+common-obj-y += tpm_util.o
 common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o
-common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o tpm_util.o
-common-obj-$(CONFIG_TPM_EMULATOR) += tpm_emulator.o tpm_util.o
+common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o
+common-obj-$(CONFIG_TPM_EMULATOR) += tpm_emulator.o
hw/tpm/tpm_util.c +67 -0

82 lines not on this page · raw message

hw/tpm/tpm_util.h +3 -0
index 1c17e3913b..2393b6bc0e 100644
@@ -39,4 +39,7 @@ static inline uint32_t tpm_cmd_get_size(const void *b)
 int tpm_util_get_buffer_size(int tpm_fd, TPMVersion tpm_version,
                              size_t *buffersize);
 
+#define DEFINE_PROP_TPMBE(_n, _s, _f)                     \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
+
 #endif /* TPM_TPM_UTIL_H */
include/hw/qdev-properties.h +0 -2
index 4d24cdf8d6..60b42ac561 100644
@@ -187,8 +187,6 @@ extern const PropertyInfo qdev_prop_link;
 
 #define DEFINE_PROP_CHR(_n, _s, _f)             \
     DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
-#define DEFINE_PROP_TPMBE(_n, _s, _f)                     \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
 #define DEFINE_PROP_STRING(_n, _s, _f)             \
     DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
 #define DEFINE_PROP_NETDEV(_n, _s, _f)             \
Signature · 1 line
2.13.6
Reviewed-by on v2 1/1
#1 lore raw
Quoted 18 lines · Cornelia Huck

Building with --disable-tpm yields

../hw/core/qdev-properties-system.o: In function `set_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:274: undefined reference to qemu_find_tpm_be' /home/cohuck/git/qemu/hw/core/qdev-properties-system.c:278: undefined reference to tpm_backend_init' ../hw/core/qdev-properties-system.o: In function `release_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:291: undefined reference to `tpm_backend_reset'

Move the implementation of DEFINE_PROP_TPMBE to hw/tpm/ so that it is only built when tpm is actually configured, and build tpm_util in every case.

Fixes 493b78303532 ("qdev: add DEFINE_PROP_TPMBE")

---
v1->v2: fix x86_64 build with mingw (always build tpm_util)

Quoted 8 lines
---
 hw/core/qdev-properties-system.c | 64 --------------------------------------
 hw/tpm/Makefile.objs             |  5 +--
 hw/tpm/tpm_util.c                | 67 ++++++++++++++++++++++++++++++++++++++++
 hw/tpm/tpm_util.h                |  3 ++
 include/hw/qdev-properties.h     |  2 --
 5 files changed, 73 insertions(+), 68 deletions(-)
#2 lore raw
Quoted 27 lines · Laurent Vivier
Quoted 18 lines · Cornelia Huck

Building with --disable-tpm yields

../hw/core/qdev-properties-system.o: In function `set_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:274: undefined reference to qemu_find_tpm_be' /home/cohuck/git/qemu/hw/core/qdev-properties-system.c:278: undefined reference to tpm_backend_init' ../hw/core/qdev-properties-system.o: In function `release_tpm':
/home/cohuck/git/qemu/hw/core/qdev-properties-system.c:291: undefined reference to `tpm_backend_reset'

Move the implementation of DEFINE_PROP_TPMBE to hw/tpm/ so that it is only built when tpm is actually configured, and build tpm_util in every case.

Fixes 493b78303532 ("qdev: add DEFINE_PROP_TPMBE")

---
v1->v2: fix x86_64 build with mingw (always build tpm_util)

Quoted 8 lines
---
  hw/core/qdev-properties-system.c | 64 --------------------------------------
  hw/tpm/Makefile.objs             |  5 +--
  hw/tpm/tpm_util.c                | 67 ++++++++++++++++++++++++++++++++++++++++
  hw/tpm/tpm_util.h                |  3 ++
  include/hw/qdev-properties.h     |  2 --
  5 files changed, 73 insertions(+), 68 deletions(-)
Quoted 4 lines

Thanks. Preparing a pull request for tomorrow.

Stefan