This function is indeed a bit vague in semantics. I'll modify this function to make it more in line with `replace`.
Stefan Hajnoczi <stefa...@redhat.com> 于2020年8月24日周一 下午11:27写道: > > On Mon, Aug 24, 2020 at 12:31:20PM +0800, wanghonghao wrote: > > Replace a queue with another atomicly. It's useful when we need to transfer > > queues between threads. > > > > Signed-off-by: wanghonghao <wanghong...@bytedance.com> > > --- > > include/qemu/queue.h | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/include/qemu/queue.h b/include/qemu/queue.h > > index 456a5b01ee..a3ff544193 100644 > > --- a/include/qemu/queue.h > > +++ b/include/qemu/queue.h > > @@ -226,6 +226,10 @@ struct { > > \ > > (dest)->slh_first = atomic_xchg(&(src)->slh_first, NULL); \ > > } while (/*CONSTCOND*/0) > > > > +#define QSLIST_REPLACE_ATOMIC(dest, src) do { > > \ > > + (src)->slh_first = atomic_xchg(&(dest)->slh_first, > > (src)->slh_first); \ > > +} while (/*CONSTCOND*/0) > > This is atomic for dest but not src. > > Maybe the name should make this clear: QSLIST_REPLACE_ATOMIC_DEST(). > > Please also add a doc comment mentioning that the modification to src is > not atomic. > > Stefan