summaryrefslogtreecommitdiff
path: root/include/block/block.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2017-06-05 14:38:54 +0200
committerFam Zheng <famz@redhat.com>2017-06-16 07:55:00 +0800
commite2a6ae7fe57c17199624e4d47826ec46ca57d546 (patch)
tree081efb61697d284b83fdf40c31195c8da0ac425e /include/block/block.h
parent20fc71b25cfd8102b7f12a2b44133894ad90040a (diff)
downloadqemu-e2a6ae7fe57c17199624e4d47826ec46ca57d546.tar.gz
block: access wakeup with atomic ops
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20170605123908.18777-6-pbonzini@redhat.com> Signed-off-by: Fam Zheng <famz@redhat.com>
Diffstat (limited to 'include/block/block.h')
-rw-r--r--include/block/block.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/block/block.h b/include/block/block.h
index 9b355e92d8..a4f09df95a 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -402,7 +402,8 @@ void bdrv_drain_all(void);
* block_job_defer_to_main_loop for how to do it). \
*/ \
assert(!bs_->wakeup); \
- bs_->wakeup = true; \
+ /* Set bs->wakeup before evaluating cond. */ \
+ atomic_mb_set(&bs_->wakeup, true); \
while (busy_) { \
if ((cond)) { \
waited_ = busy_ = true; \
@@ -414,7 +415,7 @@ void bdrv_drain_all(void);
waited_ |= busy_; \
} \
} \
- bs_->wakeup = false; \
+ atomic_set(&bs_->wakeup, false); \
} \
waited_; })