Message ID | 20201016112640.91141-1-wanghonghao@bytedance.com |
---|---|
State | New |
Headers | show |
Series | [v3,1/2] QSLIST: add atomic replace operation | expand |
diff --git a/include/qemu/queue.h b/include/qemu/queue.h index e029e7bf66..1f0cbdf87e 100644 --- a/include/qemu/queue.h +++ b/include/qemu/queue.h @@ -226,6 +226,10 @@ struct { \ (dest)->slh_first = qatomic_xchg(&(src)->slh_first, NULL); \ } while (/*CONSTCOND*/0) +#define QSLIST_REPLACE_ATOMIC(dest, src, old) do { \ + (old)->slh_first = qatomic_xchg(&(dest)->slh_first, (src)->slh_first); \ +} while (/*CONSTCOND*/0) + #define QSLIST_REMOVE_HEAD(head, field) do { \ typeof((head)->slh_first) elm = (head)->slh_first; \ (head)->slh_first = elm->field.sle_next; \
Replace a queue with another atomicly. It's useful when we need to transfer queues between threads. Signed-off-by: wanghonghao <wanghonghao@bytedance.com> --- include/qemu/queue.h | 4 ++++ 1 file changed, 4 insertions(+)