From: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
stefanb@linux.vnet.ibm.com,
linux-pm <linux-pm@lists.linux-foundation.org>,
stable@kernel.org,
Linux kernel mailing list <linux-kernel@vger.kernel.org>,
debora@linux.vnet.ibm.com,
Linus Torvalds <torvalds@linux-foundation.org>,
preining@logic.at
Subject: Re: 2.6.37.1 s2disk regression (TPM)
Date: Mon, 21 Feb 2011 14:12:35 -0300 [thread overview]
Message-ID: <4D629D03.90801@linux.vnet.ibm.com> (raw)
In-Reply-To: <4D629427.8020500@gmail.com>
On 02/21/2011 01:34 PM, Jiri Slaby wrote:
>>> BTW, the first hunk from that commit in drivers/char/tpm/tpm.c seems
>>> to be
>>> completely broken:
>>> @@ -577,9 +577,11 @@ duration:
>>> if (rc)
>>> return;
>>>
>>> - if (be32_to_cpu(tpm_cmd.header.out.return_code)
>>> - != 3 * sizeof(u32))
>>> + if (be32_to_cpu(tpm_cmd.header.out.return_code) != 0 ||
>>> + be32_to_cpu(tpm_cmd.header.out.length)
>>> + != sizeof(tpm_cmd.header.out) + sizeof(u32) + 3 *
>>> sizeof(u32))
>>> return;
>>> +
>>> duration_cap =&tpm_cmd.params.getcap_out.cap.duration;
>>> chip->vendor.duration[TPM_SHORT] =
>>> usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
>>>
>>> Namely, either the old code always returned as a result of the
>>> conditional
>>> being removed, or the new code will always return as a result of
>>> the (... != 0) check. I wonder if there's supposed to be (... == 0)
>>> instead?
>> The previous code was checking the wrong field of the TPM returned
>> buffer, probably
>> due an old commit that incorporated the tpm_cmd strucuture, it should
>> check if the return code
>> is != 0, which if true, means that the command didn't succeed. The
>> output length check should be
>> just a sanity check, so indeed the logical operator should be&&
>> instead.
> No it should not. You want 'if (wrong_retcode OR wrong_len) die;'. IOW I
> don't see what exactly is wrong on the 'if'. I think it's correct.
> (Given the old test was incorrect.)
Exactly, I read it too fast and inverted the logic while writing the response, missing De Morgan's.
> There has to be another problem which caused my regression. And since it
> reports "Operation Timed out", the former default timeout values worked
> for me, the ones read from TPM do not.
Yes, it's highly due inconsistent timeout values reported by the TPM as I mentioned, my working timeouts are:
3020000 4510000 181000000
> I'm not at that machine now, what are the usual timeouts in usecs? The
> use of conversed jiffies seem bogus. If the usecs are so low (or HZ so
> high on some configs) that the conversion returns 1 jiffie,
> wait_event_interruptible_timeout in wait_for_stat will return 0 when:
> * 1 jiffie passes without change in status (proper timeout)
> * status changed, but also the timer ticked once meanwhile, i.e. we
> scheduled a moment before timer tick
>
> But this is only a theory so far. What about this (wrapped, just dropped
> by mouse), I may try it when I'm back to the machine?
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -201,7 +201,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8
> mask, unsigned long timeout,
> ((tpm_tis_status
> (chip)& mask) ==
> mask), timeout);
> - if (rc> 0)
> + if (rc> 0 || (tpm_tis_status(chip)& mask) == mask)
> return 0;
> } else {
> stop = jiffies + timeout;
>
This will work for small timeout values discrepancies, but not if, for example,
the TPM is returning the values in msecs instead of usecs, which should affect the
result when issuing commands that last longer. That's why I'd like to see
the failing timeout values first.
Rajiv
next prev parent reply other threads:[~2011-02-21 17:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-20 10:13 2.6.37.1 s2disk regression (TPM) Jiri Slaby
2011-02-20 10:44 ` Rafael J. Wysocki
2011-02-20 10:46 ` Jiri Slaby
2011-02-20 10:51 ` Rafael J. Wysocki
2011-02-20 10:57 ` [REVERT request stable-2.6.36/37] " Jiri Slaby
2011-02-20 16:50 ` [stable] " Greg KH
2011-02-20 11:48 ` Rafael J. Wysocki
2011-02-21 15:30 ` Rajiv Andrade
2011-02-21 16:34 ` Jiri Slaby
2011-02-21 16:57 ` Linus Torvalds
2011-02-21 17:12 ` Rajiv Andrade [this message]
2011-02-21 20:39 ` Jiri Slaby
2011-02-21 21:29 ` Stefan Berger
2011-02-21 21:44 ` Jiri Slaby
2011-02-21 22:07 ` Rajiv Andrade
2011-02-21 22:10 ` Jiri Slaby
2011-02-21 22:17 ` Rafael J. Wysocki
2011-02-22 0:42 ` Stefan Berger
2011-02-22 8:41 ` Jiri Slaby
2011-02-22 11:57 ` Stefan Berger
2011-02-22 17:39 ` Jiri Slaby
2011-02-22 5:39 ` Norbert Preining
2011-02-22 8:42 ` Jiri Slaby
2011-02-22 9:13 ` Norbert Preining
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=4D629D03.90801@linux.vnet.ibm.com \
--to=srajiv@linux.vnet.ibm.com \
--cc=debora@linux.vnet.ibm.com \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=preining@logic.at \
--cc=rjw@sisk.pl \
--cc=stable@kernel.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=torvalds@linux-foundation.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