From: Jesse Barnes <jbarnes@engr.sgi.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Linux Arch list <linux-arch@vger.kernel.org>
Subject: Re: [PATCH] I/O space write barrier
Date: Mon, 27 Sep 2004 08:41:15 -0700 [thread overview]
Message-ID: <200409270841.15883.jbarnes@engr.sgi.com> (raw)
In-Reply-To: <1096245913.4965.15.camel@gaston>
On Sunday, September 26, 2004 5:45 pm, Benjamin Herrenschmidt wrote:
> On Fri, 2004-09-24 at 04:48, Jesse Barnes wrote:
> >@@ -1727,7 +1727,7 @@
> > reg = ha->iobase;
> > /* disable risc and host interrupts */
> > WRT_REG_WORD(®->ictrl, 0);
> >- RD_REG_WORD(®->ictrl); /* PCI Posted Write flush */
> >+ mmiowb(); /* make sure this write arrives before any others */
> > ha->flags.ints_enabled = 0;
> > }
>
> This is a typical example of non working sync. You platform might have
> some kind of guarantee vs. ordering of interrupts, but in the general
> case, the above may "leak", that is you may still take an interrupt
> after ha->flags.ints_enabled = 0.
Right, that's what James pointed out. Jeremy will submit the qla mmiowb bits,
and has dropped these, since the routine probably shouldn't return until
interrupts are actually enabled. (But I see on your platform the sore to
ins_enabled will probably be issued in parallel to the MMIO store to the
interrupt register, and so might happen first.)
> First, on some CPUs like evil PPCs, that write to memory may end up
> beeing on a different write queue as I explaines, thouh the mmiowb()
> will help if I implement it as a strong barrier (and the previous
> MMIO read wouldn't have helped). But that isn't my point.
>
> The problem is that interrupts are asynchronous by nature. When the
> above code is reached, the device may already have asserted the
> interrupt line, which may still be in the process of propagating to
> the CPU through the various APICs or within the CPU core. There is
> no way you can guarantee you won't take it (though since it's a PCI
> interrupt, it's, I suppose, a level interrupt, so it will probably
> go away shortly after beeing asserted). It may even be on it's way
> to beeing handled on another CPU in fact. Even synchronize_irq()
> won't help.
>
> I haven't looked at the rest of the driver, but it certainly must be
> prepared to take spurrious interrupts since that can (and so will)
> happen.
Right, afaik all drivers (or at least all PCI drivers) should be able to deal
with this. Whether or not they do is a different story (I think qla does).
Jesse
prev parent reply other threads:[~2004-09-27 15:41 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-23 18:48 [PATCH] I/O space write barrier Jesse Barnes
2004-09-23 19:03 ` James Bottomley
2004-09-23 19:07 ` Jesse Barnes
2004-09-23 19:27 ` James Bottomley
2004-09-23 19:41 ` Jesse Barnes
2004-09-23 19:57 ` Jeremy Higdon
2004-09-23 22:22 ` Jeremy Higdon
2004-09-23 23:36 ` James Bottomley
2004-09-24 5:03 ` Jeremy Higdon
2004-09-23 19:55 ` Jeremy Higdon
2004-09-23 20:09 ` Jesse Barnes
2004-09-27 0:45 ` Benjamin Herrenschmidt
2004-09-27 15:41 ` Jesse Barnes [this message]
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=200409270841.15883.jbarnes@engr.sgi.com \
--to=jbarnes@engr.sgi.com \
--cc=benh@kernel.crashing.org \
--cc=linux-arch@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