[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] tpm: move qdev_prop_tpm to hw/tpm/
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH] tpm: move qdev_prop_tpm to hw/tpm/ |
Date: |
Mon, 18 Dec 2017 15:11:31 +0100 |
On Mon, Dec 18, 2017 at 3:00 PM, Cornelia Huck <address@hidden> wrote:
> 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.
>
> Fixes: 493b78303532 ("qdev: add DEFINE_PROP_TPMBE")
> Reported-by: Thomas Huth <address@hidden>
> Signed-off-by: Cornelia Huck <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
> ---
> hw/core/qdev-properties-system.c | 64 --------------------------------------
> hw/tpm/tpm_util.c | 67
> ++++++++++++++++++++++++++++++++++++++++
> hw/tpm/tpm_util.h | 3 ++
> include/hw/qdev-properties.h | 2 --
> 4 files changed, 70 insertions(+), 66 deletions(-)
>
> diff --git a/hw/core/qdev-properties-system.c
> b/hw/core/qdev-properties-system.c
> index c17364655c..ec10da7424 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -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)
> diff --git a/hw/tpm/tpm_util.c b/hw/tpm/tpm_util.c
> index a317243a7e..17cafbe6b3 100644
> --- a/hw/tpm/tpm_util.c
> +++ b/hw/tpm/tpm_util.c
> @@ -21,9 +21,13 @@
>
> #include "qemu/osdep.h"
> #include "qemu/error-report.h"
> +#include "qapi/error.h"
> +#include "qapi/visitor.h"
> #include "tpm_util.h"
> #include "tpm_int.h"
> #include "exec/memory.h"
> +#include "sysemu/tpm_backend.h"
> +#include "hw/qdev.h"
>
> #define DEBUG_TPM 0
>
> @@ -33,6 +37,69 @@
> } \
> } while (0)
>
> +/* tpm backend property */
> +
> +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,
> +};
> +
> /*
> * Write an error message in the given output buffer.
> */
> diff --git a/hw/tpm/tpm_util.h b/hw/tpm/tpm_util.h
> index 1c17e3913b..2393b6bc0e 100644
> --- a/hw/tpm/tpm_util.h
> +++ b/hw/tpm/tpm_util.h
> @@ -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 */
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 4d24cdf8d6..60b42ac561 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -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) \
> --
> 2.13.6
>
>
--
Marc-André Lureau