tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pserialize(9) vs. TAILQ



I think I understand the context.  membar_consumer() can be omitted
because forward list iteration is (happen to be) "dependent-load"
(except on Alpha).

My confusion came from that I thought memory ordering of load is more
flexible in general.  I also didn't quite understand "dependent-load".
I have been only reading NetBSD kernel code to learn memory ordering;
and I believe, nothing in the tree utilize this topologycal
"dependent-load".  I may be missing something though.

On Mon, Nov 24, 2014 at 11:21 PM, Taylor R Campbell
<campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
>    Date: Mon, 24 Nov 2014 21:44:11 +0900
>    From: Masao Uebayashi <uebayasi%gmail.com@localhost>
>
>    - TAILQ_REMOVE() will work (except on Alpha)
>    - TAILQ_INSERT_*() will not (on Alpha and some others)
>      - TAILQ_INSERT_*() need membar_producer()
>      - TAILQ_FOREACH() needs membar_consumer()
>
> - TAILQ_REMOVE works as is everywhere (unless you enable QUEUEDEBUG).
> - TAILQ_INSERT_* need membar_producer everywhere.
> - TAILQ_FOREACH needs membar_consumer on alpha.
>
> To clarify this situation, I added _PSZ versions of all of these in
> the patch I sent earlier that will
>
> (a) do the right thing everywhere, and
> (b) mark where you're sharing a queue with pserialize.

I'm still not sure what part is really specific to pserialize(9) or not.


Home | Main Index | Thread Index | Old Index