On Wed, Nov 19, 2014 at 2:53 AM, 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). Whoever inserts entries must also issue a > membar_producer after initializing the entry and before inserting it, > to match the reader's membar_consumer.
Good point. > Someone^TM should invent names for queue operations that are > pserialize-safe by virtue of automatically issuing these memory > barriers: TAILQ_FOREACH_PSZ, TAILQ_INSERT_HEAD_PSZ, &c., or something, > so that it is easier to use them correctly and spot incorrect use. I think providing only TAILQ-for-pserialize(9) is enough. Maybe PSZQ()? I don't really mind the name.