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 <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
6e23063c46
commit
200668ba08
10
vl.c
10
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));
|
||||
|
Loading…
Reference in New Issue
Block a user