qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
To: Corey Bryant <coreyb@linux.vnet.ibm.com>
Cc: andreas.niederl@iaik.tugraz.at, qemu-devel@nongnu.org,
	anthony@codemonkey.ws, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH V19 2/7] Add TPM (frontend) hardware interface (TPM TIS) to Qemu
Date: Mon, 12 Nov 2012 08:16:28 -0500	[thread overview]
Message-ID: <50A0F6AC.4010407@linux.vnet.ibm.com> (raw)
In-Reply-To: <509BD240.50502@linux.vnet.ibm.com>

On 11/08/2012 10:39 AM, Corey Bryant wrote:
> Thanks for your responses.  I have a few comments below.
>
> On 10/24/2012 02:46 PM, Stefan Berger wrote:
>> On 09/27/2012 10:22 AM, Corey Bryant wrote:
>>>
>>>
>>> On 06/04/2012 03:37 PM, Stefan Berger wrote:
>>
>>>> +                /* check for ongoing seize by a higher locality */
>>>> +                for (l = locty + 1; l < TPM_TIS_NUM_LOCALITIES; 
>>>> l++) {
>>>> +                    if ((tis->loc[l].access & 
>>>> TPM_TIS_ACCESS_SEIZE)) {
>>>> +                        break;
>>>
>>> Were you intending to break from the for loop or the while?
>>>
>>
>> Right. I am setting a flag here now to then leave the while loop.
>>
>
> Are you setting the flag or testing it?  I'm not sure this code is 
> serving any purpose the way it is, since it is testing the flag and 
> then breaking from the for loop if it's on.  That's why I was 
> wondering if you meant to break from the while loop instead.
>

Here's how the patch looks now:


+        if ((val & TPM_TIS_ACCESS_SEIZE)) {
+            /*
+             * allow seize if a locality is active and the requesting
+             * locality is higher than the one that's active
+             * OR
+             * allow seize for requesting locality if no locality is
+             * active
+             */
+            while ((TPM_TIS_IS_VALID_LOCTY(tis->active_locty) &&
+                    locty > tis->active_locty) ||
+                    !TPM_TIS_IS_VALID_LOCTY(tis->active_locty)) {
+                bool higher_seize = FALSE;
+
+                /* already a pending SEIZE ? */
+                if ((tis->loc[locty].access & TPM_TIS_ACCESS_SEIZE)) {
+                    break;
+                }
+
+                /* check for ongoing seize by a higher locality */
+                for (l = locty + 1; l < TPM_TIS_NUM_LOCALITIES; l++) {
+                    if ((tis->loc[l].access & TPM_TIS_ACCESS_SEIZE)) {
+                        higher_seize = TRUE;
+                        break;
+                    }
+                }
+
+                if (higher_seize) {
+                    break;
+                }
+
+                /* cancel any seize by a lower locality */
+                for (l = 0; l < locty - 1; l++) {
+                    tis->loc[l].access &= ~TPM_TIS_ACCESS_SEIZE;
+                }
[...]


>>>> +            case TPM_TIS_STATUS_EXECUTION:
>>>> +            case TPM_TIS_STATUS_RECEPTION:
>>>> +                /* abort currently running command */
>>>> +                dprintf("tpm_tis: %s: Initiating abort.\n",
>>>> +                        __func__);
>>>> +                tpm_tis_prep_abort(s, locty, locty);
>>>> +            break;
>>>> +
>>>> +            case TPM_TIS_STATUS_COMPLETION:
>>>
>>> Does this path need to abort if TPM_STS_x.dataAvail is on? This
>>> comment is based on "Table 19: State Transition Table." from the TPM
>>> TIS document.
>>>
>>
>> If TPM_TIS_STATUS_COMPLETION is the current state, then independent of
>> the TPM_TIS_STS_DATA_AVAILABLE flag the state transition is to idle
>> (states 30 and 37 in the spec). Following state 0.B in the spec, we
>> implement a TPM without idle state and so we transition to READY state
>> immediately. The data available flag should be reset, though.
>>
>
> Ok.  But row 30 in the table also says it aborts the command in the 
> "Action Taken" column.
>

Row 30 describes that abort for while the TPM is in 'Completion' state, 
meaning the TPM has delivered the response from the TPM to the TIS and 
now an application can pick up the response. The abort in this case is 
achieved through changing the state and resetting the (response) buffer 
pointers so that the application will not receive more response bytes.

Regards,
     Stefan

  reply	other threads:[~2012-11-12 13:16 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-04 19:37 [Qemu-devel] [PATCH V19 0/7] Qemu Trusted Platform Module (TPM) integration Stefan Berger
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 1/7] Support for TPM command line options Stefan Berger
2012-09-27 14:12   ` Corey Bryant
2012-10-24 19:06     ` Stefan Berger
2012-11-08 15:52       ` Corey Bryant
2012-11-12 13:04         ` Stefan Berger
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 2/7] Add TPM (frontend) hardware interface (TPM TIS) to Qemu Stefan Berger
2012-09-27 14:22   ` Corey Bryant
2012-10-24 18:46     ` Stefan Berger
2012-11-08 15:39       ` Corey Bryant
2012-11-12 13:16         ` Stefan Berger [this message]
2012-11-12 18:48           ` Corey Bryant
2012-10-03 18:35   ` Corey Bryant
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 3/7] Add a debug register Stefan Berger
2012-09-27 14:23   ` Corey Bryant
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 4/7] Build the TPM frontend code Stefan Berger
2012-09-27 14:24   ` Corey Bryant
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 5/7] Add a TPM Passthrough backend driver implementation Stefan Berger
2012-09-27 14:28   ` Corey Bryant
2012-10-24 19:07     ` Stefan Berger
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 6/7] Introduce --enable-tpm-passthrough configure option Stefan Berger
2012-09-27 14:29   ` Corey Bryant
2012-06-04 19:37 ` [Qemu-devel] [PATCH V19 7/7] Add fd parameter for TPM passthrough driver Stefan Berger
2012-09-27 14:35   ` Corey Bryant
2012-10-03 18:46   ` Corey Bryant
2012-10-24 19:06     ` Stefan Berger
2012-06-04 19:56 ` [Qemu-devel] [PATCH V19 0/7] Qemu Trusted Platform Module (TPM) integration Stefan Weil
2012-06-04 23:08   ` Anthony Liguori
2012-09-27 14:59 ` Corey Bryant
2012-09-28 22:43   ` 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=50A0F6AC.4010407@linux.vnet.ibm.com \
    --to=stefanb@linux.vnet.ibm.com \
    --cc=andreas.niederl@iaik.tugraz.at \
    --cc=anthony@codemonkey.ws \
    --cc=coreyb@linux.vnet.ibm.com \
    --cc=mst@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).