All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>, qemu-devel@nongnu.org
Cc: amarnath.valluri@intel.com
Subject: Re: [Qemu-devel] [PATCH v2 26/28] qdev: add DEFINE_PROP_TPMBE
Date: Mon, 6 Nov 2017 15:31:00 -0500	[thread overview]
Message-ID: <4501d863-bd2d-a62b-b3b8-47c986bdc497@linux.vnet.ibm.com> (raw)
In-Reply-To: <20171106183925.16747-27-marcandre.lureau@redhat.com>

On 11/06/2017 01:39 PM, Marc-André Lureau wrote:
> A property to lookup a tpm backend.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   include/hw/qdev-properties.h     |  3 ++
>   hw/core/qdev-properties-system.c | 64 ++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 67 insertions(+)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index e2321f1cc1..4d24cdf8d6 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -17,6 +17,7 @@ extern const PropertyInfo qdev_prop_int64;
>   extern const PropertyInfo qdev_prop_size;
>   extern const PropertyInfo qdev_prop_string;
>   extern const PropertyInfo qdev_prop_chr;
> +extern const PropertyInfo qdev_prop_tpm;
>   extern const PropertyInfo qdev_prop_ptr;
>   extern const PropertyInfo qdev_prop_macaddr;
>   extern const PropertyInfo qdev_prop_on_off_auto;
> @@ -186,6 +187,8 @@ 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)             \
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index ec10da7424..c17364655c 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -21,6 +21,7 @@
>   #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,
> @@ -236,6 +237,69 @@ 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 */

I suppose this is the reason why you need **be rather than *be, but why 
do you need this here?

Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>

     Stefan

> +    }
> +    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)

  reply	other threads:[~2017-11-06 20:31 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-06 18:38 [Qemu-devel] [PATCH v2 00/28] TPM: code cleanup (not 2.11) Marc-André Lureau
2017-11-06 18:38 ` [Qemu-devel] [PATCH v2 01/28] tpm-tis: remove unused locty_number Marc-André Lureau
2017-11-06 18:57   ` Stefan Berger
2017-11-06 18:38 ` [Qemu-devel] [PATCH v2 02/28] tpm: move TpmIf in include/sysemu/tpm.h Marc-André Lureau
2017-11-06 18:58   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 03/28] tpm-backend: store TPMIf interface, improve backend_init() Marc-André Lureau
2017-11-06 19:02   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 04/28] tpm-tis: no longer expose TPMState Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 05/28] tpm-be: call request_completed() out of thread Marc-André Lureau
2017-11-06 19:22   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 06/28] tpm-be: report error instead of front-end Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 07/28] tpm-be: ask model to the TPM interface Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 08/28] tpm: remove unused opened code Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 09/28] tpm-passthrough: don't save guessed cancel_path in options Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 10/28] tpm-be: update optional function pointers Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 11/28] tpm-passthrough: pass TPMPassthruState to handle_device_opts Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 12/28] tpm-backend: move set 'id' to common code Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 13/28] tpm-passthrough: make it safer to destroy after creation Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 14/28] tpm-passthrough: simplify create() Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 15/28] tpm-passthrough: workaround a possible race Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 16/28] tpm-tis: simplify header inclusion Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 17/28] tpm: rename qemu_find_tpm() -> qemu_find_tpm_be() Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 18/28] tpm: lookup the the TPM interface instead of TIS device Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 19/28] tpm: add TPM interface to lookup TPM version Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 20/28] tpm: add tpm_cmd_get_size() to tpm_util Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 21/28] acpi: change TPM TIS data conditions Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 22/28] tpm-emulator: add a FIXME comment about blocking cancel Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 23/28] tpm-tis: remove redundant 'tpm_tis:' in error messages Marc-André Lureau
2017-11-06 19:24   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 24/28] tpm-tis: check that at most one TPM device exists Marc-André Lureau
2017-11-06 19:25   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 25/28] tpm-emulator: protect concurrent ctrl_chr access Marc-André Lureau
2017-11-06 19:32   ` Stefan Berger
2017-11-06 22:11     ` Marc-André Lureau
2017-11-07  1:11       ` Stefan Berger
2017-11-07 11:08         ` Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 26/28] qdev: add DEFINE_PROP_TPMBE Marc-André Lureau
2017-11-06 20:31   ` Stefan Berger [this message]
2017-11-07 10:58     ` Marc-André Lureau
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 27/28] tpm-tis: use DEFINE_PROP_TPMBE Marc-André Lureau
2017-11-06 20:31   ` Stefan Berger
2017-11-06 18:39 ` [Qemu-devel] [PATCH v2 28/28] tpm: remove tpm_register_model() Marc-André Lureau
2017-11-06 20:33   ` Stefan Berger
2017-11-07  1:05 ` [Qemu-devel] [PATCH v2 00/28] TPM: code cleanup (not 2.11) Stefan Berger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4501d863-bd2d-a62b-b3b8-47c986bdc497@linux.vnet.ibm.com \
    --to=stefanb@linux.vnet.ibm.com \
    --cc=amarnath.valluri@intel.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.