提交 7d506c90 编写于 作者: P Paolo Bonzini 提交者: Stefan Hajnoczi

async: optimize aio_bh_poll

Avoid entering the slow path of qemu_lockcnt_dec_and_lock if
no bottom half has to be deleted.
Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: NFam Zheng <famz@redhat.com>
Message-id: 20170112180800.21085-11-pbonzini@redhat.com
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 7c690fd1
...@@ -92,6 +92,7 @@ int aio_bh_poll(AioContext *ctx) ...@@ -92,6 +92,7 @@ int aio_bh_poll(AioContext *ctx)
{ {
QEMUBH *bh, **bhp, *next; QEMUBH *bh, **bhp, *next;
int ret; int ret;
bool deleted = false;
qemu_lockcnt_inc(&ctx->list_lock); qemu_lockcnt_inc(&ctx->list_lock);
...@@ -112,9 +113,17 @@ int aio_bh_poll(AioContext *ctx) ...@@ -112,9 +113,17 @@ int aio_bh_poll(AioContext *ctx)
bh->idle = 0; bh->idle = 0;
aio_bh_call(bh); aio_bh_call(bh);
} }
if (bh->deleted) {
deleted = true;
}
} }
/* remove deleted bhs */ /* remove deleted bhs */
if (!deleted) {
qemu_lockcnt_dec(&ctx->list_lock);
return ret;
}
if (qemu_lockcnt_dec_and_lock(&ctx->list_lock)) { if (qemu_lockcnt_dec_and_lock(&ctx->list_lock)) {
bhp = &ctx->first_bh; bhp = &ctx->first_bh;
while (*bhp) { while (*bhp) {
...@@ -128,7 +137,6 @@ int aio_bh_poll(AioContext *ctx) ...@@ -128,7 +137,6 @@ int aio_bh_poll(AioContext *ctx)
} }
qemu_lockcnt_unlock(&ctx->list_lock); qemu_lockcnt_unlock(&ctx->list_lock);
} }
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册