public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Matthew Wilcox <matthew@wil.cx>
To: Grant Grundler <grundler@parisc-linux.org>
Cc: Roland Dreier <rdreier@cisco.com>,
	linux-pci@atrey.karlin.mff.cuni.cz, linux-ia64@vger.kernel.org,
	linux-kernel@vger.kernel.org, openib-general@openib.org,
	John Partridge <johnip@sgi.com>
Subject: Re: Ordering between PCI config space writes and MMIO reads?
Date: Wed, 25 Oct 2006 08:18:59 -0600	[thread overview]
Message-ID: <20061025141859.GC5591@parisc-linux.org> (raw)
In-Reply-To: <20061025063022.GC12319@colo.lackof.org>

On Wed, Oct 25, 2006 at 12:30:22AM -0600, Grant Grundler wrote:
> Can someone provide a quote of the PCI Local bus spec that allows this?
> (Or at least a reference to a spec version and section number)

PCI-PCI bridges are allowed to do it.  If you look in table E-1 of PCI
2.3, or table 8-3 of PCI-X 2.0, you'll see that a Posted Memory Write
can pass a Delayed Write Request (or in PCI-X, a Memory Write can pass a
Split Write Request).

So mmiowb() will solve the problem for Altix, but leave everybody else
vulnerable.  I actually don't see a way of forcing the config write to
complete before a memory write -- everything is allowed to pass a config
write, even a config read.  I initially thought "But only a crack monkey
would implement a system where a config read could pass a config write",
but the spec explains that:

  In most PCI-X implementations, Split Requests are managed in separate
  buffers from Split Completions, so Split Requests naturally pass Split
  Completions. However, no deadlocks occur if Split Completions block
  Split Requests.

So all this code that checks to see if a write had an effect is unsafe.
I'm a little perturbed by this.  It means the only way to reliably
distinguish between a write that hasn't taken effect yet and a bit (say,
MWI) the device hasn't implemented is to do a memory access to the
device.  Which is hard when you're trying to program the BARs.

I suppose this hasn't bitten us before in, what, 7 years of PCI-X, so
it can't be *that* common a thing for bridges to do.  And we would have
noticed the BAR sizing code going wrong (as it does config write
followed immediately by config read), so maybe implementations aren't as
crackful as the PCI spec seems to permit them to be.

I find it really hard to believe the PCI committee have done something
this stupid.  There must be another rule somewhere that I'm missing.


  parent reply	other threads:[~2006-10-25 14:19 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-24 19:13 Ordering between PCI config space writes and MMIO reads? Roland Dreier
2006-10-24 19:22 ` Jeff Garzik
2006-10-24 21:47   ` Matthew Wilcox
2006-10-24 21:51     ` Roland Dreier
2006-10-24 22:12       ` John Partridge
2006-10-24 22:36       ` Matthew Wilcox
2006-10-24 22:43         ` David Miller
2006-10-25 14:15           ` Roland Dreier
2006-10-31 19:02             ` Roland Dreier
2006-10-31 19:53               ` Michael S. Tsirkin
2006-10-31 19:53                 ` Roland Dreier
2006-10-31 19:58                   ` Matthew Wilcox
2006-10-31 20:28                   ` Michael S. Tsirkin
2006-10-31 20:34                 ` Richard B. Johnson
2006-10-31 20:47                   ` Matthew Wilcox
2006-10-31 22:30                     ` Roland Dreier
2006-11-01 16:27                       ` John Partridge
2006-11-01 16:46                         ` Matthew Wilcox
2006-11-01 17:08                           ` John Partridge
2006-11-01 17:14                             ` Matthew Wilcox
2006-11-01 23:04                         ` David Miller
2006-11-02  1:08                           ` John Partridge
2006-10-31 20:50                   ` Michael S. Tsirkin
2006-10-24 22:59         ` [openib-general] " Jason Gunthorpe
2006-10-25 14:04           ` Roland Dreier
2006-10-24 23:09         ` Michael S. Tsirkin
2006-10-24 23:27         ` Jack Steiner
2006-10-25 14:05           ` Roland Dreier
2006-11-02  3:05           ` Jeremy Higdon
2006-10-24 21:01 ` [openib-general] " JWM
2006-10-24 21:24 ` Alan Cox
2006-10-24 21:29   ` Roland Dreier
2006-10-24 21:37     ` Jeff Garzik
2006-10-25  6:30 ` Grant Grundler
2006-10-25 14:11   ` Roland Dreier
2006-10-25 14:18   ` Matthew Wilcox [this message]
2006-10-25 17:15     ` [openib-general] " Jason Gunthorpe
2006-10-25 18:22     ` Michael S. Tsirkin

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=20061025141859.GC5591@parisc-linux.org \
    --to=matthew@wil.cx \
    --cc=grundler@parisc-linux.org \
    --cc=johnip@sgi.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=openib-general@openib.org \
    --cc=rdreier@cisco.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox