Module Name: src Committed By: riastradh Date: Thu Feb 23 03:01:22 UTC 2023
Modified Files: src/sys/kern: subr_pcq.c Log Message: pcq(9): Fix consume operation in pcq_peek/get. These use atomic_load_consume to match the atomic_store_release in pcq_put for pcq->pcq_items[c]. Reading the snapshot of pcq->pcq_pc need not be ordered: - The consumer side (pcq_peek/get) is serialized by the API contract (single-consumer, multi-producer), so no ordering is necessary. - The producer side updates pcq->pcq_pc first; if the consumer side sees that before the producer side has stored pcq->pcq_items[c], there's no problem -- it's as if the consumer had happened just a moment earlier and the producer hadn't entered pcq_put yet. However, it should be an atomic load, not a plain load. So use atomic_load_relaxed, if for no other reason than to pacify thread sanitizers. XXX pullup-9 XXX pullup-10 To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/kern/subr_pcq.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.