From 5b8bb3595a2941e9408021f1080e60ce86d677d2 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 3 Oct 2016 18:14:15 +0200 Subject: async: add aio_bh_schedule_oneshot qemu_bh_delete is already clearing bh->scheduled at the same time as it's setting bh->deleted. Since it's not using any memory barriers, there is no synchronization going on for bh->deleted, and this makes the bh->deleted checks superfluous in aio_compute_timeout, aio_bh_poll and aio_ctx_check. Just remove them, and put the (bh->scheduled && bh->deleted) combo to work in a new function aio_bh_schedule_oneshot. The new function removes the need to save the QEMUBH pointer between the creation and the execution of the bottom half. Signed-off-by: Paolo Bonzini Signed-off-by: Kevin Wolf --- include/block/aio.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include/block') diff --git a/include/block/aio.h b/include/block/aio.h index 173c1ed404..b9fe2cb37e 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -180,6 +180,12 @@ void aio_context_acquire(AioContext *ctx); /* Relinquish ownership of the AioContext. */ void aio_context_release(AioContext *ctx); +/** + * aio_bh_schedule_oneshot: Allocate a new bottom half structure that will run + * only once and as soon as possible. + */ +void aio_bh_schedule_oneshot(AioContext *ctx, QEMUBHFunc *cb, void *opaque); + /** * aio_bh_new: Allocate a new bottom half structure. * -- cgit v1.2.1