qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]