Am 03.01.2011 11:01, Avi Kivity wrote: > On 01/03/2011 11:46 AM, Jan Kiszka wrote: >> Hi, >> >> at least in kvm mode, the qemu_fair_mutex seems to have lost its >> function of balancing qemu_global_mutex access between the io-thread and >> vcpus. It's now only taken by the latter, isn't it? >> >> This and the fact that qemu-kvm does not use this kind of lock made me >> wonder what its role is and if it is still relevant in practice. I'd >> like to unify the execution models of qemu-kvm and qemu, and this lock >> is the most obvious difference (there are surely more subtle ones as >> well...). >> > > IIRC it was used for tcg, which has a problem that kvm doesn't have: a > tcg vcpu needs to hold qemu_mutex when it runs, which means there will > always be contention on qemu_mutex. In the absence of fairness, the tcg > thread could dominate qemu_mutex and starve the iothread. > > This doesn't happen with kvm since kvm vcpus drop qemu_mutex when running. >
I see. Then I guess we should do this:
diff --git a/cpus.c b/cpus.c
index 9bf5224..0de8552 100644
--- a/cpus.c
+++ b/cpus.c
@@ -734,9 +734,7 @@ static sigset_t block_io_signals(void)
void qemu_mutex_lock_iothread(void)
{
if (kvm_enabled()) {
- qemu_mutex_lock(&qemu_fair_mutex);
qemu_mutex_lock(&qemu_global_mutex);
- qemu_mutex_unlock(&qemu_fair_mutex);
} else {
qemu_mutex_lock(&qemu_fair_mutex);
if (qemu_mutex_trylock(&qemu_global_mutex)) {
Jan
signature.asc
Description: OpenPGP digital signature
