From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jason Gunthorpe <jgg@ziepe.ca>,
James Bottomley <James.Bottomley@hansenpartnership.com>,
linux-integrity@vger.kernel.org,
linux-security-module@vger.kernel.org,
Linux List Kernel Mailing <linux-kernel@vger.kernel.org>
Subject: Re: Getting weird TPM error after rebasing my tree to security/next-general
Date: Wed, 23 Jan 2019 17:36:38 +0200 [thread overview]
Message-ID: <20190123153638.GA8727@linux.intel.com> (raw)
In-Reply-To: <CAHk-=wgdOfi+zVVfKDDqJMs2Y7Lq0uufmP8Hx8JzQFA9UzNrBw@mail.gmail.com>
On Wed, Jan 23, 2019 at 07:26:42AM +1300, Linus Torvalds wrote:
> On Wed, Jan 23, 2019 at 2:29 AM Jarkko Sakkinen
> <jarkko.sakkinen@linux.intel.com> wrote:
> >
> > > >
> > > > Fails on commit 170d13ca3a2fdaaa0283399247631b76b441cca2. Still works on
> > > > preceding commit a959dc88f9c8900296ccf13e2f3e1cbc555a8917.
> > >
> > > This changes the IO access pattern in memcpy_to/fromio.. Presumably
> > > CRB HW doesn't like the new 4 byte move? Swap each one in crb to
> > > memcpy to confirm..
> > >
> > > If the HW requires particular access patterns you can't use
> > > memcpy_to/fromio
> >
> > Did not have time to look at the commit at all but your deduction
> > is correct. I know it without testing.
> >
> > Memory controller will feed 1's on unaligned read from IO memory,
> > and as we can see from the TPM header, this change causes two of
> > those:
>
> Funky. But how did it work before then?
>
> The new memcpy_fromio() is designed to have _predictable_ access
> patterns. Not necessarily the best, but at least consistent.
>
> Prevously, we used whatever random "memcpy()" implementation we
> happened to pick, which *could* be aligned (particularly "rep movsb" -
> absolutely horrible performance for MMIO, but by doing IO one byte at
> a time it was certainly aligned ;), but most of our x86 memcpy
> implementations don't actually try all that hard to align the source.
> And the manual version will actually copy things *backwards* for some
> cases.
>
> Is it just that this particular hardware always happened to trigger
> the ERMS case (ie "rep movsb")?
This is the particular snippet in question:
memcpy_fromio(buf, priv->rsp, 6);
expected = be32_to_cpup((__be32 *) &buf[2]);
if (expected > count || expected < 6)
return -EIO;
memcpy_fromio(&buf[6], &priv->rsp[6], expected - 6);
I guess it did in the first memcpy_fromio operation since it is less
than a quad word, right? Not sure why the 2nd memcpy_fromio() operation
has worked, though.
> Anyway, Jason is correct that if a device has particular IO pattern
> requirements, you shouldn't use "memcpy_fromio()" and friends, but
> it's interesting how it apparently *happened* to work before.
>
> Linus
Sure, I'll prepare a fix ASAP.
/Jarkko
next prev parent reply other threads:[~2019-01-23 15:36 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-18 14:25 Getting weird TPM error after rebasing my tree to security/next-general Jarkko Sakkinen
2019-01-18 22:09 ` James Bottomley
2019-01-20 16:04 ` Jarkko Sakkinen
2019-01-22 1:02 ` Jarkko Sakkinen
2019-01-22 2:58 ` Jason Gunthorpe
2019-01-22 13:29 ` Jarkko Sakkinen
2019-01-22 18:26 ` Linus Torvalds
2019-01-23 15:36 ` Jarkko Sakkinen [this message]
2019-01-23 18:43 ` Linus Torvalds
2019-01-29 13:20 ` Jarkko Sakkinen
2019-01-31 12:26 ` Jarkko Sakkinen
2019-01-31 16:04 ` Jarkko Sakkinen
2019-01-31 17:06 ` Jarkko Sakkinen
2019-01-31 17:43 ` Linus Torvalds
2019-01-31 18:47 ` Jarkko Sakkinen
2019-01-31 18:35 ` Jarkko Sakkinen
2019-01-31 18:51 ` Linus Torvalds
2019-01-31 18:52 ` Linus Torvalds
2019-01-31 19:10 ` Linus Torvalds
2019-01-31 19:47 ` Winkler, Tomas
2019-02-01 8:12 ` Jarkko Sakkinen
2019-01-31 20:07 ` Winkler, Tomas
2019-01-31 20:47 ` Jarkko Sakkinen
2019-01-31 21:58 ` Linus Torvalds
2019-01-31 23:31 ` Jerry Snitselaar
2019-02-01 11:40 ` Jarkko Sakkinen
2019-01-31 20:45 ` Jarkko Sakkinen
2019-02-01 18:04 ` Linus Torvalds
2019-02-04 11:58 ` Jarkko Sakkinen
2019-01-23 20:11 ` Jarkko Sakkinen
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=20190123153638.GA8727@linux.intel.com \
--to=jarkko.sakkinen@linux.intel.com \
--cc=James.Bottomley@hansenpartnership.com \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--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 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.