Date: Wed, 19 Nov 2014 17:11:18 +0800
   From: Dennis Ferguson <dennis.c.fergu...@gmail.com>

   On 19 Nov, 2014, at 01:53 , Taylor R Campbell 
<campbell+netbsd-tech-k...@mumble.net> wrote:
   > The one tricky detail is that after a reader has fetched the tqe_next
   > pointer, it must issue a membar_consumer before dereferencing the
   > pointer: otherwise there is no guarantee about the order in which the
   > CPU will fetch the tqe_next pointer and its contents (which it may
   > have cached).

   I don't think it is correct to use a membar_consumer().

It is certainly /correct/.  It may not be /necessary/ in some
architectures that provide more guarantees about load ordering than
are written in the program without membar_consumer.

   Since most machines don't need any barrier here it would be extremely
   inefficient to add a membar_consumer() since that would make all machines
   pay for the idiosyncrasies unique to the DEC Alpha.

We could invent a membar_datadep_consumer for this case, and make it a
no-op on everything other than Alpha until another CPU designer
relaxes the memory ordering.  The intent of the code is clearer with
the memory barrier, and it emphasizes the need for a paired
membar_producer elsewhere.

Reply via email to