From: Jan Kiszka Date: Mon, 22 Aug 2011 15:46:01 +0000 (+0200) Subject: Do not drop global mutex for polled main loop runs X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=200668ba0839e664f0e4d0bcdc55ab5a163a418a;p=qemu.git Do not drop global mutex for polled main loop runs If we call select without a timeout, it's more efficient to keep the global mutex locked as we may otherwise just play ping pong with a vcpu thread contending for it. This is particularly important for TCG mode where we run in lock-step with the vcpu thread. Signed-off-by: Jan Kiszka Signed-off-by: Anthony Liguori --- diff --git a/vl.c b/vl.c index 5f1a17704b..c52937a151 100644 --- a/vl.c +++ b/vl.c @@ -1349,9 +1349,15 @@ void main_loop_wait(int nonblocking) qemu_iohandler_fill(&nfds, &rfds, &wfds, &xfds); slirp_select_fill(&nfds, &rfds, &wfds, &xfds); - qemu_mutex_unlock_iothread(); + if (timeout > 0) { + qemu_mutex_unlock_iothread(); + } + ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv); - qemu_mutex_lock_iothread(); + + if (timeout > 0) { + qemu_mutex_lock_iothread(); + } qemu_iohandler_poll(&rfds, &wfds, &xfds, ret); slirp_select_poll(&rfds, &wfds, &xfds, (ret < 0));