From: Dave Engebretsen <engebret@vnet.ibm.com>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Memory Barrier Definitions
Date: Thu, 09 May 2002 14:38:39 -0500 [thread overview]
Message-ID: <3CDAD03F.45DC911C@vnet.ibm.com> (raw)
In-Reply-To: <3CDA5EA4.E565F1D7@colorfullife.com>
Manfred Spraul wrote:
>
>
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
>
> >
> > An example of where these primitives get us into trouble is the use of
> > wmb() to order two stores which are only to system memory (where a
> > lwsync would do for ppc64) and for a store to system memory followed by
> > a store to I/O (many examples in drivers).
> >
> 2 questions:
>
> 1) Does that only affect memory barriers, or both memory barriers and
> spinlocks?
>
> example (from drivers/net/natsemi.c)
>
> cpu0:
> spin_lock(&lock);
> writew(1, ioaddr+PGSEL);
> ...
> writew(0, ioaddr+PGSEL);
> spin_unlock(&lock);
>
> cpu1:
> spin_lock(&lock);
> readw(ioaddr+whatever); // assumes that the register window is 0.
>
> writew(1, ioaddr+PGSEL) selects a register window of the NIC. Are writew
> and the spinlock synchonized on ppc64?
This is an interesting example. As the implementation stands today, for
this specific example, we are ok because the spin_lock/unlock pair
provides ordering within system memory access pairs OR i/o space pairs.
Not across the types (we do not use the heavy weight sync). So if there
are examples where the spin lock is meant to protect system memory
access to i/o space, we are in trouble.
> 2) when you write "system memory", is that memory allocated with
> kmalloc/gfp, or also memory allocated with pci_alloc_consistent()?
>
> I've always assumed that
> pci_alloc_consistent_ptr->data=0;
> writew(0, ioaddr+TRIGGER);
>
> is ordered, i.e. the memory write happens before the writew. Is that
> guaranteed?
>
It is not guaranteed on all systems (PowerPC being an example).
pci_alloc_consistent allocted storage is just normal system memory that
happens to be mapped to a PCI bus for DMA access.
Your example would fail, and in fact is basically what has been observed
to fail on Power4.
What is needed is:
pci_alloc_consistent_ptr->data = 0;
wmb();
writew(0, ioaddr+TRIGGER);
This code also was observed to fail, when wmb() = eieio, which does not
order system memory accesses to I/O space accesses.
At present, we have worked around this by doing a heavy 'sync' before
and after writew and its ilk. The point of my initial questions though
is that this fix is not exactly optimal :(
Dave.
next prev parent reply other threads:[~2002-05-09 19:39 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-09 11:33 Memory Barrier Definitions Manfred Spraul
2002-05-09 19:38 ` Dave Engebretsen [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-05-07 19:07 Dave Engebretsen
2002-05-07 19:49 ` Alan Cox
2002-05-07 19:53 ` Dave Engebretsen
2002-05-07 20:27 ` Alan Cox
2002-05-07 21:23 ` Dave Engebretsen
2002-05-07 22:15 ` justincarlson
2002-05-08 2:49 ` Dave Engebretsen
2002-05-08 13:54 ` Justin Carlson
2002-05-08 15:27 ` Dave Engebretsen
2002-05-08 15:49 ` Andi Kleen
2002-05-08 17:07 ` David Mosberger
2002-05-09 7:36 ` Rusty Russell
2002-05-09 8:01 ` Keith Owens
2002-05-09 15:00 ` David Mosberger
2002-05-13 3:26 ` Rusty Russell
2002-05-13 16:36 ` David Mosberger
2002-05-13 16:50 ` Linus Torvalds
2002-05-13 17:53 ` David Mosberger
2002-05-13 23:28 ` Rusty Russell
2002-05-07 22:57 ` Anton Blanchard
2002-05-13 18:16 ` Jesse Barnes
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=3CDAD03F.45DC911C@vnet.ibm.com \
--to=engebret@vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.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