All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: serge@hallyn.com, qemu-devel@nongnu.org, andreas.niederl@iaik.tugraz.at
Subject: Re: [Qemu-devel] [PATCH V4 02/10] Add TPM (frontend) hardware interface (TPM TIS) to Qemu
Date: Wed, 18 May 2011 09:23:24 +0200	[thread overview]
Message-ID: <m3tycsjwur.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <20110506173244.772773627@linux.vnet.ibm.com> (Stefan Berger's message of "Fri, 06 May 2011 13:32:26 -0400")

Stefan Berger <stefanb@linux.vnet.ibm.com> writes:

> This patch adds the main code of the TPM frontend driver, the TPM TIS
> interface, to Qemu. The code is largely based on my previous implementation
> for Xen but has been significantly extended to meet the standard's
> requirements, such as the support for changing of localities and all the
> functionality of the available flags.
>
> Communication with the backend (i.e., for Xen or the libtpms-based one)
> is cleanly separated through an interface which the backend driver needs
> to implement.
>
> The TPM TIS driver's backend was previously chosen in the code added
> to arch_init. The frontend holds a pointer to the chosen backend (interface).
>
> Communication with the backend is largely based on signals and conditions.
> Whenever the frontend has collected a complete packet, it will signal
> the backend, which then starts processing the command. Once the result
> has been returned, the backend invokes a callback function
> (tis_tpm_receive_cb()).
>
> The one tricky part is support for VM suspend while the TPM is processing
> a command. In this case the frontend driver is waiting for the backend
> to return the result of the last command before shutting down. It waits
> on a condition for a signal from the backend, which is delivered in 
> tis_tpm_receive_cb().
>
> Testing the proper functioning of the different flags and localities 
> cannot be done from user space when running in Linux for example, since
> access to the address space of the TPM TIS interface is not possible. Also
> the Linux driver itself does not exercise all functionality. So, for
> testing there is a fairly extensive test suite as part of the SeaBIOS patches
> since from within the BIOS one can have full access to all the TPM's registers.
>
> v3:
>   - prefixing functions with tis_
>   - added a function to the backend interface 'early_startup_tpm' that
>     allows to detect the presence of the block storage and gracefully fails
>     Qemu if it's not available. This works with migration using shared
>     storage but doesn't support migration with block storage migration.
>     For encyrypted QCoW2 and in case of a snapshot resue the late_startup_tpm
>     interface function is called
>
> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
>
> ---
>  hw/tpm_tis.c |  871 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 871 insertions(+)
>
> Index: qemu-git/hw/tpm_tis.c
> ===================================================================
> --- /dev/null
> +++ qemu-git/hw/tpm_tis.c
[...]
> +static void tis_reset(DeviceState *d)
> +{
> +    TPMState *s = container_of(d, TPMState, busdev.qdev);
> +    tis_s_reset(s);
> +}
> +
> +
> +static int tis_init(ISADevice *dev)

Function not used, sure this compiles with -Werror?  If not, it needs
fixing.

As far as I can see, the use is added in 03/10, where you add the
missing qdev parts.  Makes it hard to review for qdev sanity, so I did
*not* do that.

> +{
> +    TPMState *s = DO_UPCAST(TPMState, busdev, dev);
> +    int iomemtype, rc;
> +
> +    qemu_mutex_init(&s->state_lock);
> +    qemu_cond_init(&s->from_tpm_cond);
> +    qemu_cond_init(&s->to_tpm_cond);
> +
> +    if (active_be->init(s, tis_tpm_receive_cb)) {
> +        goto err_exit;
> +    }
> +
> +    isa_init_irq(dev, &s->irq, s->irq_num);
> +
> +    iomemtype = cpu_register_io_memory(tis_readfn, tis_writefn, s,
> +                                       DEVICE_LITTLE_ENDIAN);
> +    cpu_register_physical_memory(TIS_ADDR_BASE, 0x1000 * NUM_LOCALITIES,
> +                                 iomemtype);
> +
> +    /*
> +     * startup the TPM backend early to detect problems early
> +     */
> +    rc = tis_do_early_startup_tpm(s);
> +    if (rc != 0 && rc != -ENOKEY) {
> +        fprintf(stderr,"tpm_tis: Fatal error accessing TPM's block storage.\n");
> +        goto err_exit;
> +    }
> +
> +    return 0;
> +
> + err_exit:
> +    return -1;
> +}
> +

Please fix "new blank line at EOF."

  parent reply	other threads:[~2011-05-18  7:24 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-06 17:32 [Qemu-devel] [PATCH V4 00/10] Qemu Trusted Platform Module (TPM) integration Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 01/10] Support for TPM command line options Stefan Berger
2011-05-06 20:23   ` Serge E. Hallyn
2011-05-06 20:32     ` Stefan Berger
2011-05-06 20:33       ` Serge E. Hallyn
2011-05-17 20:58   ` Serge E. Hallyn
2011-05-17 23:15     ` Stefan Berger
2011-05-18  1:52       ` Serge E. Hallyn
2011-05-17 23:16     ` Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 02/10] Add TPM (frontend) hardware interface (TPM TIS) to Qemu Stefan Berger
2011-05-07  1:54   ` Serge E. Hallyn
2011-05-18  7:23   ` Markus Armbruster [this message]
2011-05-18 10:53     ` Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 03/10] Add persistent state handling to TPM TIS frontend driver Stefan Berger
2011-05-18  7:25   ` Markus Armbruster
2011-05-18 10:51     ` Stefan Berger
2011-05-25 14:49     ` Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 04/10] Add tpm_tis driver to build process Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 05/10] Add a debug register Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 06/10] Add a TPM backend skeleton implementation Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 07/10] Implementation of the libtpms-based backend Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 08/10] Introduce file lock for the block layer Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 09/10] Add block storage support for libtpms based TPM backend Stefan Berger
2011-05-06 17:32 ` [Qemu-devel] [PATCH V4 10/10] Encrypt state blobs using AES CBC encryption Stefan Berger
2011-05-09 14:21 ` [Qemu-devel] [PATCH V4 00/10] Qemu Trusted Platform Module (TPM) integration Serge E. Hallyn
2011-05-09 17:37   ` Stefan Berger
2011-05-10  4:07 ` Serge E. Hallyn
2011-05-10 10:46   ` Stefan Berger
2011-05-10 11:59     ` Serge E. Hallyn
2011-05-10 12:43       ` Stefan Berger
2011-05-10 14:20         ` Serge E. Hallyn

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=m3tycsjwur.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=andreas.niederl@iaik.tugraz.at \
    --cc=qemu-devel@nongnu.org \
    --cc=serge@hallyn.com \
    --cc=stefanb@linux.vnet.ibm.com \
    /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.