On 01/13/2012 05:44 PM, Peter Maydell wrote:
The main advantage of circular lists (the fact that the head node
> has the same memory layout as any other node) is completely negated
> by the implementation in qemu-queue.h. Not surprisingly, nobody
> uses QCIRCLEQ. While this might change if RCU is ever adopted by
> QEMU, the QLIST is also RCU-friendly and in fact it is used in a
> RCU-like manner by 9pfs already. So, just kill QCIRCLEQ.
Kirk McKusick on why CIRCLEQ existed in the first place and
why BSD still has it:
http://markmail.org/message/i5oir4jhmkopjzy5
...basically just legacy back-compat. So it's fine for us to drop
it from QEMU, since we have nothing to be back-compat with.
Thanks for posting this.
I think it's not entirely correct because the cast in QTAILQ_PREV and
QTAILQ_FOREACH_REVERSE does not look like valid ANSI C. No matter how
hard I look I admit I cannot figure out how it works, but anyway I
suspect it can be changed to ANSI C using typeof if one was bitten by
it. So removing QCIRCLEQ is not a bad idea anyway.
BTW, NetBSD also has some STAILQ which looks entirely the same as SIMPLEQ.
Paolo