public inbox for linux-integrity@vger.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: Jerry Snitselaar <jsnitsel@redhat.com>
Cc: Laurent Bigonville <bigon@debian.org>,
	Alexander.Steffen@infineon.com, linux-integrity@vger.kernel.org
Subject: Re: [tpmdd-devel] tpm device not showing up in /dev anymore
Date: Tue, 14 Nov 2017 16:43:02 +0200	[thread overview]
Message-ID: <20171114144302.wnvz7t2moecgzre6@linux.intel.com> (raw)
In-Reply-To: <20171110205300.eyfkoyabobv7llgb@localhost.localdomain>

On Fri, Nov 10, 2017 at 01:53:00PM -0700, Jerry Snitselaar wrote:
> On Fri Nov 10 17, Laurent Bigonville wrote:
> > Le 10/11/17 a 08:07, Jerry Snitselaar a ecrit :
> > > On Thu Nov 09 17, Jerry Snitselaar wrote:
> > > > On Thu Nov 09 17, Laurent Bigonville wrote:
> > > > > Le 09/11/17 a 01:04, Laurent Bigonville a ecrit :
> > > > > > 
> > > > > > 
> > > > > > Le 24/10/17 a 18:07, Jarkko Sakkinen a ecrit :
> > > > > > > On Tue, Oct 24, 2017 at 07:57:06AM -0700, Jerry Snitselaar wrote:
> > > > > > > > On Tue Oct 24 17, Jarkko Sakkinen wrote:
> > > > > > > > > On Mon, Oct 23, 2017 at 06:45:15AM -0700, Jerry Snitselaar wrote:
> > > > > > > > > > On Mon Oct 23 17, Jarkko Sakkinen wrote:
> > > > > > > > > > > On Sat, Oct 21, 2017 at 10:53:55AM
> > > > > > > > > > > +0200, Laurent Bigonville wrote:
> > > > > > > > > > > > Le 14/10/17 a 10:13, Jerry Snitselaar a ecrit :
> > > > > > > > > > > > > On Wed Sep 06 17, Jarkko Sakkinen wrote:
> > > > > > > > > > > > > > On Fri, Sep 01, 2017 at
> > > > > > > > > > > > > > 02:10:18PM +0200,
> > > > > > > > > > > > > > Laurent Bigonville
> > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > Le 31/08/17 a 18:40, Jerry Snitselaar a ecrit :
> > > > > > > > > > > > > > > > On Thu Aug 31 17, Alexander.Steffen@infineon.com wrote:
> > > > > > > > > > > > > > > > > > Le 29/08/17 a 18:35, Laurent Bigonville a ecrit :
> > > > > > > > > > > > > > > > > > > Le
> > > > > > > > > > > > > > > > > > > 29/08/17
> > > > > > > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > > > > > 18:00,
> > > > > > > > > > > > > > > > > > > Alexander.Steffen@infineon.com
> > > > > > > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > > > > > ecrit :
> > > > > > > > > > > > > > > > > > > > > An idea how to troubleshoot this?
> > > > > > > > > > > > > > > > > > > > Can you run git bisect on the changes between 4.11 and
> > > > > > > > > > > > > > > 4.12, so that
> > > > > > > > > > > > > > > > > > > > we find the offending commit? It is probably sufficient
> > > > > > > > > > > > > > > to limit the
> > > > > > > > > > > > > > > > > > > > search
> > > > > > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > > > > > commits
> > > > > > > > > > > > > > > > > > > > that
> > > > > > > > > > > > > > > > > > > > touch
> > > > > > > > > > > > > > > > > > > > something
> > > > > > > > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > > > > > drivers/char/tpm.
> > > > > > > > > > > > > > > > > > > I'll try and keep you posted.
> > > > > > > > > > > > > > > > > > OK I've
> > > > > > > > > > > > > > > > > > been
> > > > > > > > > > > > > > > > > > able to
> > > > > > > > > > > > > > > > > > bisect
> > > > > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > > problem
> > > > > > > > > > > > > > > > > > and the
> > > > > > > > > > > > > > > > > > bad
> > > > > > > > > > > > > > > > > > commit
> > > > > > > > > > > > > > > > > > is:
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > > e6aef069b6e97790cb127d5eeb86ae9ff0b7b0e3
> > > > > > > > > > > > > > > > > > is the
> > > > > > > > > > > > > > > > > > first
> > > > > > > > > > > > > > > > > > bad
> > > > > > > > > > > > > > > > > > commit
> > > > > > > > > > > > > > > > > > commit e6aef069b6e97790cb127d5eeb86ae9ff0b7b0e3
> > > > > > > > > > > > > > > > > > Author: Jerry Snitselaar <jsnitsel@redhat.com>
> > > > > > > > > > > > > > > > > > Date:   Mon Mar 27 08:46:04 2017 -0700
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >       tpm_tis: convert to using locality callbacks
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >      
> > > > > > > > > > > > > > > > > > This
> > > > > > > > > > > > > > > > > > patch
> > > > > > > > > > > > > > > > > > converts
> > > > > > > > > > > > > > > > > > tpm_tis
> > > > > > > > > > > > > > > > > > to use
> > > > > > > > > > > > > > > > > > of the
> > > > > > > > > > > > > > > > > > new tpm
> > > > > > > > > > > > > > > > > > class
> > > > > > > > > > > > > > > > > > ops
> > > > > > > > > > > > > > > > > >       request_locality, and relinquish_locality.
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >      
> > > > > > > > > > > > > > > > > > With the
> > > > > > > > > > > > > > > > > > move to
> > > > > > > > > > > > > > > > > > using
> > > > > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > > callbacks,
> > > > > > > > > > > > > > > > > > release_locality
> > > > > > > > > > > > > > > > > > is
> > > > > > > > > > > > > > > > > > changed so
> > > > > > > > > > > > > > > > > >       that we now release the locality even if there is no
> > > > > > > > > > > > > > > > > > request pending.
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >       This required some changes to the tpm_tis_core_init
> > > > > > > > > > > > > > > code path to
> > > > > > > > > > > > > > > > > >       make sure locality is requested when needed:
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >         - tpm2_probe code path will end up calling
> > > > > > > > > > > > > > > > > > request/release through
> > > > > > > > > > > > > > > > > >           callbacks, so request_locality prior to
> > > > > > > > > > > > > > > tpm2_probe not needed.
> > > > > > > > > > > > > > > > > >        
> > > > > > > > > > > > > > > > > > -
> > > > > > > > > > > > > > > > > > probe_itpm
> > > > > > > > > > > > > > > > > > makes
> > > > > > > > > > > > > > > > > > calls to
> > > > > > > > > > > > > > > > > > tpm_tis_send_data
> > > > > > > > > > > > > > > > > > which no
> > > > > > > > > > > > > > > > > > longer calls
> > > > > > > > > > > > > > > > > >          
> > > > > > > > > > > > > > > > > > request_locality,
> > > > > > > > > > > > > > > > > > so add
> > > > > > > > > > > > > > > > > > request_locality
> > > > > > > > > > > > > > > > > > prior to
> > > > > > > > > > > > > > > > > > tpm_tis_send_data
> > > > > > > > > > > > > > > > > >          
> > > > > > > > > > > > > > > > > > calls.
> > > > > > > > > > > > > > > > > > Also
> > > > > > > > > > > > > > > > > > drop
> > > > > > > > > > > > > > > > > > release_locality
> > > > > > > > > > > > > > > > > > call in
> > > > > > > > > > > > > > > > > > middleof
> > > > > > > > > > > > > > > > > > probe_itpm, and
> > > > > > > > > > > > > > > > > >          
> > > > > > > > > > > > > > > > > > keep
> > > > > > > > > > > > > > > > > > locality
> > > > > > > > > > > > > > > > > > until
> > > > > > > > > > > > > > > > > > release_locality
> > > > > > > > > > > > > > > > > > called
> > > > > > > > > > > > > > > > > > at end
> > > > > > > > > > > > > > > > > > of
> > > > > > > > > > > > > > > > > > probe_itpm.
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > >       Cc: Peter Huewe <peterhuewe@gmx.de>
> > > > > > > > > > > > > > > > > >      
> > > > > > > > > > > > > > > > > > Cc:
> > > > > > > > > > > > > > > > > > Jarkko
> > > > > > > > > > > > > > > > > > Sakkinen
> > > > > > > > > > > > > > > > > > <jarkko.sakkinen@linux.intel.com>
> > > > > > > > > > > > > > > > > >      
> > > > > > > > > > > > > > > > > > Cc:
> > > > > > > > > > > > > > > > > > Jason
> > > > > > > > > > > > > > > > > > Gunthorpe
> > > > > > > > > > > > > > > > > > <jgunthorpe@obsidianresearch.com>
> > > > > > > > > > > > > > > > > >       Cc: Marcel Selhorst <tpmdd@selhorst.net>
> > > > > > > > > > > > > > > > > >      
> > > > > > > > > > > > > > > > > > Signed-off-by:
> > > > > > > > > > > > > > > > > > Jerry
> > > > > > > > > > > > > > > > > > Snitselaar
> > > > > > > > > > > > > > > > > > <jsnitsel@redhat.com>
> > > > > > > > > > > > > > > > > >       Reviewed-by: Jarkko Sakkinen
> > > > > > > > > > > > > > > <jarkko.sakkinen@linux.intel.com>
> > > > > > > > > > > > > > > > > > Tested-by:
> > > > > > > > > > > > > > > > > > Jarkko
> > > > > > > > > > > > > > > > > > Sakkinen
> > > > > > > > > > > > > > > > > > <jarkko.sakkinen@linux.intel.com>
> > > > > > > > > > > > > > > > > >       Signed-off-by: Jarkko Sakkinen
> > > > > > > > > > > > > > > <jarkko.sakkinen@linux.intel.com>
> > > > > > > > > > > > > > > > > > :040000 040000 70234365da69959d47076ebb40c8d17f520c3e44
> > > > > > > > > > > > > > > > > > 72f21b446e45ea1003de75902b0553deb99157fd M drivers
> > > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > I've looked
> > > > > > > > > > > > > > > > > again at the
> > > > > > > > > > > > > > > > > code in
> > > > > > > > > > > > > > > > > question,
> > > > > > > > > > > > > > > > > but could
> > > > > > > > > > > > > > > > > not find
> > > > > > > > > > > > > > > > > anything that is obviously wrong there. Locality is now
> > > > > > > > > > > > > > > > > requested/released
> > > > > > > > > > > > > > > > > at slightly
> > > > > > > > > > > > > > > > > different
> > > > > > > > > > > > > > > > > points in
> > > > > > > > > > > > > > > > > the process
> > > > > > > > > > > > > > > > > than
> > > > > > > > > > > > > > > > > before, but
> > > > > > > > > > > > > > > > > that's it.
> > > > > > > > > > > > > > > > > It does not
> > > > > > > > > > > > > > > > > seem to
> > > > > > > > > > > > > > > > > cause
> > > > > > > > > > > > > > > > > problems
> > > > > > > > > > > > > > > > > with the
> > > > > > > > > > > > > > > > > majority of TPMs, since you are the first to report any, so
> > > > > > > > > > > > > > > maybe it
> > > > > > > > > > > > > > > > > is a quirk that only affects this device.
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > Perhaps Jerry can help, since this is his change?
> > > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > > Alexander
> > > > > > > > > > > > > > > > Getting some
> > > > > > > > > > > > > > > > caffeine in me,
> > > > > > > > > > > > > > > > and starting to
> > > > > > > > > > > > > > > > take a look.
> > > > > > > > > > > > > > > > Adding
> > > > > > > > > > > > > > > > Jarkko as well
> > > > > > > > > > > > > > > > since this might
> > > > > > > > > > > > > > > > involve the
> > > > > > > > > > > > > > > > general locality
> > > > > > > > > > > > > > > > changes.
> > > > > > > > > > > > > > > > 
> > > > > > > > > > > > > > > > Laurent, if I
> > > > > > > > > > > > > > > > send you a patch
> > > > > > > > > > > > > > > > with some
> > > > > > > > > > > > > > > > debugging code
> > > > > > > > > > > > > > > > added, would
> > > > > > > > > > > > > > > > you be able to
> > > > > > > > > > > > > > > > run it on that
> > > > > > > > > > > > > > > > system? I wasn't
> > > > > > > > > > > > > > > > running into
> > > > > > > > > > > > > > > > issues
> > > > > > > > > > > > > > > > on the system I
> > > > > > > > > > > > > > > > had with a 1.2
> > > > > > > > > > > > > > > > device, but I no
> > > > > > > > > > > > > > > > longer have
> > > > > > > > > > > > > > > > access
> > > > > > > > > > > > > > > > to it. I'll see
> > > > > > > > > > > > > > > > if I can find
> > > > > > > > > > > > > > > > one in our labs
> > > > > > > > > > > > > > > > and reproduce it
> > > > > > > > > > > > > > > > there.
> > > > > > > > > > > > > > > Yes I should be able to do that
> > > > > > > > > > > > > > Any findings?
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > /Jarkko
> > > > > > > > > > > > > Okay, finally getting back
> > > > > > > > > > > > > to this. Looking at the code
> > > > > > > > > > > > > it isn't clear
> > > > > > > > > > > > > to me
> > > > > > > > > > > > > why the change is causing
> > > > > > > > > > > > > this. So while I stare at
> > > > > > > > > > > > > this some more
> > > > > > > > > > > > > Laurent
> > > > > > > > > > > > > could you reproduce it with
> > > > > > > > > > > > > this patch so I can see what
> > > > > > > > > > > > > the status and
> > > > > > > > > > > > > access registers look like?
> > > > > > > > > > > > > Does anyone else on here
> > > > > > > > > > > > > happen to have a
> > > > > > > > > > > > > Sinosun
> > > > > > > > > > > > > tpm device? The systems I
> > > > > > > > > > > > > have access to with TPM1.2
> > > > > > > > > > > > > devices don't have
> > > > > > > > > > > > > this
> > > > > > > > > > > > > issue.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > --8<--
> > > > > > > > > > > > > 
> > > > > > > > > > > > > diff --git a/drivers/char/tpm/tpm_tis_core.c
> > > > > > > > > > > > > b/drivers/char/tpm/tpm_tis_core.c
> > > > > > > > > > > > > index fdde971bc810..7d60a7e4b50a 100644
> > > > > > > > > > > > > --- a/drivers/char/tpm/tpm_tis_core.c
> > > > > > > > > > > > > +++ b/drivers/char/tpm/tpm_tis_core.c
> > > > > > > > > > > > > @@ -258,6 +258,7 @@ static
> > > > > > > > > > > > > int tpm_tis_send_data(struct
> > > > > > > > > > > > > tpm_chip *chip,
> > > > > > > > > > > > > const u8 *buf, size_t len)
> > > > > > > > > > > > >      int rc, status, burstcnt;
> > > > > > > > > > > > >      size_t count = 0;
> > > > > > > > > > > > >      bool itpm = priv->flags & TPM_TIS_ITPM_WORKAROUND;
> > > > > > > > > > > > > +    u8 access;
> > > > > > > > > > > > > 
> > > > > > > > > > > > >      status = tpm_tis_status(chip);
> > > > > > > > > > > > >      if ((status & TPM_STS_COMMAND_READY) == 0) {
> > > > > > > > > > > > > @@ -292,6 +293,11 @@ static
> > > > > > > > > > > > > int tpm_tis_send_data(struct
> > > > > > > > > > > > > tpm_chip *chip,
> > > > > > > > > > > > > const u8 *buf, size_t len)
> > > > > > > > > > > > >          }
> > > > > > > > > > > > >          status = tpm_tis_status(chip);
> > > > > > > > > > > > >          if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
> > > > > > > > > > > > > +            rc =
> > > > > > > > > > > > > tpm_tis_read8(priv,
> > > > > > > > > > > > > TPM_ACCESS(priv->locality),
> > > > > > > > > > > > > &access);
> > > > > > > > > > > > > +            if (rc < 0)
> > > > > > > > > > > > > +               
> > > > > > > > > > > > > dev_info(&chip->dev,
> > > > > > > > > > > > > "TPM_STS_DATA_EXPECT == 0:
> > > > > > > > > > > > > read
> > > > > > > > > > > > > failure TPM_ACCESS(%d)\n", priv->locality);
> > > > > > > > > > > > > +            else
> > > > > > > > > > > > > +               
> > > > > > > > > > > > > dev_info(&chip->dev,
> > > > > > > > > > > > > "TPM_STS_DATA_EXPECT == 0:
> > > > > > > > > > > > > locality: %d status: %x
> > > > > > > > > > > > > access: %x\n",
> > > > > > > > > > > > > priv->locality, status,
> > > > > > > > > > > > > access);
> > > > > > > > > > > > >              rc = -EIO;
> > > > > > > > > > > > >              goto out_err;
> > > > > > > > > > > > >          }
> > > > > > > > > > > > > @@ -309,6 +315,11 @@ static
> > > > > > > > > > > > > int tpm_tis_send_data(struct
> > > > > > > > > > > > > tpm_chip *chip,
> > > > > > > > > > > > > const u8 *buf, size_t len)
> > > > > > > > > > > > >      }
> > > > > > > > > > > > >      status = tpm_tis_status(chip);
> > > > > > > > > > > > >      if (!itpm && (status & TPM_STS_DATA_EXPECT) != 0) {
> > > > > > > > > > > > > +        rc =
> > > > > > > > > > > > > tpm_tis_read8(priv,
> > > > > > > > > > > > > TPM_ACCESS(priv->locality),
> > > > > > > > > > > > > &access);
> > > > > > > > > > > > > +        if (rc < 0)
> > > > > > > > > > > > > +           
> > > > > > > > > > > > > dev_info(&chip->dev,
> > > > > > > > > > > > > "TPM_STS_DATA_EXPECT != 0:
> > > > > > > > > > > > > read
> > > > > > > > > > > > > failure TPM_ACCESS(%d)\n", priv->locality);
> > > > > > > > > > > > > +        else
> > > > > > > > > > > > > +           
> > > > > > > > > > > > > dev_info(&chip->dev,
> > > > > > > > > > > > > "TPM_STS_DATA_EXPECT != 0:
> > > > > > > > > > > > > locality:
> > > > > > > > > > > > > %d status: %x access: %x\n", priv->locality, status, access);
> > > > > > > > > > > > >          rc = -EIO;
> > > > > > > > > > > > >          goto out_err;
> > > > > > > > > > > > >      }
> > > > > > > > > > > > Please find here the dmesg output of the patched kernel
> > > > > > > > > > > At least 0xff is corrupted value in
> > > > > > > > > > > senseful way. CPU fills the read
> > > > > > > > > > > with ones for example for unaligned
> > > > > > > > > > > bus read. See table 19 in PC client
> > > > > > > > > > > spec. This can happen when you do unaligned read for example.
> > > > > > > > > > > 
> > > > > > > > > > > Maybe TPM is unreachable i.e.
> > > > > > > > > > > powered off. Bit busy with stuff ATM
> > > > > > > > > > > but
> > > > > > > > > > > would probably make sense to compare
> > > > > > > > > > > that 0x81 to table 18 in the same
> > > > > > > > > > > spec.
> > > > > > > > > > > 
> > > > > > > > > > > /Jarkko
> > > > > > > > > > 0x81 is saying the access register
> > > > > > > > > > status is valid, and the locality
> > > > > > > > > > is not active. That first bit means A
> > > > > > > > > > Dynamic OS has not been previously
> > > > > > > > > > established on the platform. Normally we
> > > > > > > > > > would see 0xa1, which would
> > > > > > > > > > mean valid register status, and the locality is active.
> > > > > > > > > I think the important thing to note here is
> > > > > > > > > that STS has bits set that
> > > > > > > > > should never be set. So we can conclude that TPM might be either
> > > > > > > > > 
> > > > > > > > > 1. Powered off
> > > > > > > > > 2. In some transition state?
> > > > > > > > > 
> > > > > > > > > /Jarkko
> > > > > > > > If it was powered off would we be getting a
> > > > > > > > valid read from the access
> > > > > > > > register?
> > > > > > > I think there is no universal answer to that :-)
> > > > > > > 
> > > > > > > Maybe adding a extra delay would be next test to make? If for random
> > > > > > > reason it is in-between states...
> > > > > > Any more ideas?
> > > > > > 
> > > > > > The chip is definitely in a weird state :/ I tried
> > > > > > several ways to reset the chip (windows, tpm-tools,...).
> > > > > > 
> > > > > > I've been able to reset the chip via the bios (which now
> > > > > > shows unowned) but chip is still locked apparently.
> > > > > > 
> > > > > > But still with < 4.12 I'm able to get /some/ information
> > > > > > Public EK, PCR,... out of the chip so it's not
> > > > > > completely broken...
> > > > > 
> > > > > OK correction the TPM is now unlocked (I let the computer
> > > > > running for more than 24h with nothing accessing the TPM)
> > > > > and with 4.9 I've been able to take the ownership again.
> > > > > 
> > > > > Under 4.12 I still have the same errors as mentioned originally
> > > > 
> > > > Hi Laurent,
> > > > 
> > > > Would it be possible for you to run ftrace from boot with the
> > > > following kernel parameters:
> > > > 
> > > > ftrace=function_graph ftrace_filter=tpm*
> > > > 
> > > 
> > > actually 'ftrace=function_graph
> > > ftrace_filter=tpm*,*locality,wait_for_tpm_stat' would be better
> > > 
> > > > and then send me the results of 'cat /sys/kernel/debug/tracing/trace' ?
> > Here you are.
> 
> Thank you Laurent.
> 
> A few interesting things here:
> 
> > # tracer: function_graph
> > #
> > # CPU  DURATION                  FUNCTION CALLS
> > # |     |   |                     |   |   |   |
> >  1)   4.510 us    |  tpm_init();
> >  1)               |  tpm_tis_pnp_init() {
> >  1)               |    tpm_tis_init.part.3() {
> >  1)               |      tpm_tis_core_init() {
> >  1)               |        tpmm_chip_alloc() {
> >  1)   3.935 us    |          tpm_chip_alloc();
> >  1)   4.787 us    |        }
> >  1)   0.199 us    |        tpm_tcg_read_bytes();
> >  1)   0.217 us    |        tpm_tcg_read32();
> >  1)   0.117 us    |        tpm_tcg_write32();
> >  1)               |        tpm2_probe() {
> >  1)               |          tpm_transmit_cmd() {
> >  1)               |            tpm_transmit() {
> >  1)               |              request_locality() {
> >  1)               |                check_locality() {
> >  1)   0.045 us    |                  tpm_tcg_read_bytes();
> >  1)   1.708 us    |                }
> >  1)   2.077 us    |              }
> 
> 
> So it goes request locality, does check to see if the locality
> is already active and it is, so doesn't go through the process
> of requesting the locality.
> 
> 
> >  1)   0.168 us    |              tpm2_prepare_space();
> >  1)               |              tpm_tis_send() {
> >  1)               |                tpm_tis_send_main() {
> >  1)               |                  tpm_tis_send_data() {
> >  1)   0.045 us    |                    tpm_tcg_read_bytes();
> >  1)   0.044 us    |                    tpm_tcg_read32();
> >  1)   1.723 us    |                    tpm_tcg_write_bytes();
> >  1)               |                    wait_for_tpm_stat() {
> >  1)               |                      tpm_tis_status() {
> >  1)   0.042 us    |                        tpm_tcg_read_bytes();
> >  1)   5.163 us    |                      }
> >  1)               |                      tpm_tis_status() {
> >  1)   0.167 us    |                        tpm_tcg_read_bytes();
> >  1)   2.182 us    |                      }
> >  1)               |                      tpm_tis_status() {
> >  1)   0.194 us    |                        tpm_tcg_read_bytes();
> >  1)   2.452 us    |                      }
> >  1) * 30406.24 us |                    }
> >  1)   0.088 us    |                    tpm_tcg_read_bytes();
> >  1)   0.123 us    |                    tpm_tcg_write_bytes();
> >  1)               |                    wait_for_tpm_stat() {
> >  1)               |                      tpm_tis_status() {
> >  1)   0.084 us    |                        tpm_tcg_read_bytes();
> >  1)   1.940 us    |                      }
> >  1)               |                      tpm_tis_status() {
> >  1)   0.170 us    |                        tpm_tcg_read_bytes();
> >  1)   2.217 us    |                      }
> >  1) * 16000.74 us |                    }
> >  1)   0.084 us    |                    tpm_tcg_read_bytes();
> >  1) * 46425.66 us |                  }
> >  1)   0.115 us    |                  tpm_tcg_write_bytes();
> >  1) * 46426.85 us |                }
> >  1) * 46427.35 us |              }
> >  1)               |              tpm_tis_status() {
> >  1)   1.389 us    |                tpm_tcg_read_bytes();
> >  1)   1.909 us    |              }
> >  1)   0.095 us    |              tpm_tis_req_canceled();
> >  1)               |              tpm_tis_status() {
> >  1)   0.187 us    |                tpm_tcg_read_bytes();
> >  1)   2.110 us    |              }
> >  1)               |              tpm_tis_recv() {
> >  1)               |                wait_for_tpm_stat() {
> >  1)               |                  tpm_tis_status() {
> >  1)   0.082 us    |                    tpm_tcg_read_bytes();
> >  1)   1.898 us    |                  }
> >  1)   2.425 us    |                }
> >  1)   0.102 us    |                tpm_tcg_read32();
> >  1)   5.453 us    |                tpm_tcg_read_bytes();
> >  1)               |                wait_for_tpm_stat() {
> >  1)               |                  tpm_tis_status() {
> >  1)   0.092 us    |                    tpm_tcg_read_bytes();
> >  1)   1.858 us    |                  }
> >  1)   2.332 us    |                }
> >  1)   0.077 us    |                tpm_tcg_read_bytes();
> >  1)   0.112 us    |                tpm_tcg_write_bytes();
> >  1) + 25.466 us   |              }
> >  1)   0.152 us    |              tpm2_commit_space();
> >  1)               |              release_locality() {
> >  1)   0.080 us    |                tpm_tcg_write_bytes();
> >  1)   0.672 us    |              }
> 
> Releases the locality as it comes back out of tpm_transmit_cmd
> 
> >  1) * 62349.91 us |            }
> >  1) * 62350.38 us |          }
> >  1) * 62350.87 us |        }
> >  1)   0.070 us    |        tpm_tcg_read32();
> >  1)   0.073 us    |        tpm_tcg_read_bytes();
> >  1)   0.096 us    |        tpm_tcg_read16();
> >  1)   0.042 us    |        tpm_tcg_read32();
> >  1)               |        tpm_chip_register() {
> >  1)               |          tpm1_auto_startup() {
> >  1)               |            tpm_get_timeouts() {
> >  1)               |              tpm_get_timeouts.part.6() {
> >  1)               |                tpm_getcap() {
> >  1)               |                  tpm_transmit_cmd() {
> >  1)               |                    tpm_transmit() {
> >  1)               |                      request_locality() {
> >  1)               |                        check_locality() {
> >  1)   0.091 us    |                          tpm_tcg_read_bytes();
> >  1)   1.680 us    |                        }
> >  1)   1.973 us    |                      }
> 
> Goes to request the locality again, but once again the check sees
> that the locality is already active, so doesn't go through process
> of requesting the locality. Very odd.
> 
> >  1)   0.072 us    |                      tpm2_prepare_space();
> >  1)               |                      tpm_tis_send() {
> >  1)               |                        tpm_tis_send_main() {
> >  1)               |                          tpm_tis_send_data() {
> >  1)   0.043 us    |                            tpm_tcg_read_bytes();
> 
> tpm_tis_stat inlined?
> 
> >  1)   0.071 us    |                            tpm_tcg_write_bytes();
> 
> tpm_tis_ready inlined?
> 
> >  1)               |                            wait_for_tpm_stat() {
> >  1)               |                              tpm_tis_status() {
> >  1)   0.042 us    |                                tpm_tcg_read_bytes();
> >  1)   1.634 us    |                              }
> >  1)               |                              tpm_tis_status() {
> >  1)   0.183 us    |                                tpm_tcg_read_bytes();
> >  1)   2.121 us    |                              }
> >  1) * 15942.66 us |                            }
> 
> The wait_for_tpm_stat does its loop twice checking the status register
> so at this point apparently it isn't reading 0xff.
> 
> >  1)   0.108 us    |                            tpm_tcg_read32();
> 
> This read is get_burstcount.
> 
> >  1)   1.773 us    |                            tpm_tcg_write_bytes();
> >  1)               |                            wait_for_tpm_stat() {
> >  1)               |                              tpm_tis_status() {
> >  1)   0.082 us    |                                tpm_tcg_read_bytes();
> >  1)   5.011 us    |                              }
> >  1)   5.618 us    |                            }
> >  1)   0.077 us    |                            tpm_tcg_read_bytes();
> 
> tpm_tis_status inlined?
> 
> >  1)   0.090 us    |                            tpm_tcg_write_bytes();
> 
> Come out of loop and write last byte
> 
> >  1)               |                            wait_for_tpm_stat() {
> >  1)               |                              tpm_tis_status() {
> >  1)   0.080 us    |                                tpm_tcg_read_bytes();
> >  1)   1.921 us    |                              }
> >  1)   2.376 us    |                            }
> >  1)   0.077 us    |                            tpm_tcg_read_bytes();
> 
> inlined tpm_tis_status again? Here is where it sees data is still expected and errors out.
> With that debugging patch at this point it was showing that the locality was not active.
> Also didn't show that the tpm had been seized by another locality.
> 
> >  1)   0.080 us    |                            tpm_tcg_write_bytes();
> 
> tpm_tis_ready inlined? in out_err
> 
> >  1) * 15970.97 us |                          }
> >  1) * 15971.39 us |                        }
> >  1) * 15971.81 us |                      }
> >  1)               |                      release_locality() {
> >  1)   0.103 us    |                        tpm_tcg_write_bytes();
> >  1)   0.535 us    |                      }
> >  1) * 16023.04 us |                    }
> >  1) * 16023.35 us |                  }
> >  1) * 16024.79 us |                }
> >  1) * 16067.18 us |              }
> >  1) * 16067.67 us |            }
> >  1) * 16068.10 us |          }
> >  1) * 16068.47 us |        }
> >  1) * 78448.69 us |      }
> >  1) * 78455.45 us |    }
> >  1) * 78456.71 us |  }
> >  1)   0.564 us    |  tpm_dev_release();
> >  0)               |  tpm_pcr_read() {
> >  0)   0.225 us    |    tpm_chip_find_get();
> >  0)   0.734 us    |  }
> 
> I wonder if it is possible that the release locality from the probe
> isn't completing on the chip until after the request/check that
> happens at the beginning of the tpm_get_timeouts.  Perhaps we need
> something like wait_for_tpm_stat for the access register, and
> verifying that locality was released before returning out of
> release_locality?
> 
> Any thoughts?

Sorry for late response.

Would make sense if that is the root cause. For just testing the
hypothesis (not something to be merged) adding a delay to release
would probably make sense (like 200 ms delay to make sure that the
TPM has done the state transition).

/Jarkko

  parent reply	other threads:[~2017-11-14 14:43 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <f9526f55-df96-64fc-a4d6-877ce04e7156@debian.org>
     [not found] ` <dcad0104c46d4d5f88e642862bdb42c2@MUCSE603.infineon.com>
     [not found]   ` <47c4300b-8701-79a6-1c58-3a5853f4c5e3@debian.org>
     [not found]     ` <595efb25-8d87-f39d-037f-9c9a98462339@debian.org>
     [not found]       ` <857106e4bb864bb8a68b1381fffc8f50@MUCSE603.infineon.com>
     [not found]         ` <20170831164015.3ajgwydgxtippwoz@rhwork>
     [not found]           ` <0d9be244-ace0-030d-6ff9-c4e94c63b7e9@debian.org>
     [not found]             ` <20170906040555.fqedhmo5277sd6fq@linux.intel.com>
2017-10-14  8:13               ` [tpmdd-devel] tpm device not showing up in /dev anymore Jerry Snitselaar
2017-10-21  8:53                 ` Laurent Bigonville
2017-10-23 13:23                   ` Jarkko Sakkinen
2017-10-23 13:45                     ` Jerry Snitselaar
2017-10-23 13:48                       ` Laurent Bigonville
2017-10-24 13:51                       ` Jarkko Sakkinen
2017-10-24 14:57                         ` Jerry Snitselaar
2017-10-24 16:07                           ` Jarkko Sakkinen
2017-11-09  0:04                             ` Laurent Bigonville
2017-11-09 19:58                               ` Laurent Bigonville
2017-11-09 23:50                                 ` Jerry Snitselaar
2017-11-10  2:19                                   ` Jerry Snitselaar
2017-11-10  0:28                                 ` Jerry Snitselaar
2017-11-10  7:07                                   ` Jerry Snitselaar
2017-11-10  8:21                                     ` Laurent Bigonville
2017-11-10 20:53                                       ` Jerry Snitselaar
2017-11-11 15:45                                         ` Jason Gunthorpe
2017-11-11 19:12                                           ` Jerry Snitselaar
2017-11-11 19:46                                             ` Jason Gunthorpe
2017-11-11 20:31                                               ` Jerry Snitselaar
2017-11-14  0:26                                                 ` Laurent Bigonville
2017-11-14  2:45                                                   ` Jason Gunthorpe
2017-11-14 14:59                                                 ` Jarkko Sakkinen
2017-11-14 15:17                                                   ` James Bottomley
2017-11-17 13:16                                                     ` Jarkko Sakkinen
2018-01-02 23:54                                                       ` Laurent Bigonville
2018-01-03  0:33                                                         ` Jerry Snitselaar
2018-01-05 19:01                                                           ` Laurent Bigonville
2018-02-09 10:53                                                           ` Laurent Bigonville
2018-02-14 11:44                                                             ` Jarkko Sakkinen
2018-03-09 17:24                                                               ` Laurent Bigonville
2018-03-15 16:24                                                                 ` Jarkko Sakkinen
2018-05-03 11:38                                                                   ` Laurent Bigonville
2018-05-03 17:43                                                                     ` Jerry Snitselaar
2018-05-04  8:20                                                                       ` Jarkko Sakkinen
2018-05-04  8:18                                                                     ` Jarkko Sakkinen
2018-05-04 14:22                                                                       ` Jerry Snitselaar
2017-11-14 14:55                                               ` Jarkko Sakkinen
2017-11-14 14:43                                         ` Jarkko Sakkinen [this message]
2017-10-25  8:04                         ` Laurent Bigonville

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=20171114144302.wnvz7t2moecgzre6@linux.intel.com \
    --to=jarkko.sakkinen@linux.intel.com \
    --cc=Alexander.Steffen@infineon.com \
    --cc=bigon@debian.org \
    --cc=jsnitsel@redhat.com \
    --cc=linux-integrity@vger.kernel.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