tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pserialize(9) vs. TAILQ
Date: Wed, 19 Nov 2014 17:11:18 +0800
From: Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost>
On 19 Nov, 2014, at 01:53 , Taylor R Campbell <campbell+netbsd-tech-kern%mumble.net@localhost> 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.
Home |
Main Index |
Thread Index |
Old Index