qemu-thread: add a fast path to the Win32 QemuEvent
commit7c9b2bf67775ecc1359ce973580807d173e7f710
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 12 Aug 2015 13:38:18 +0000 (12 15:38 +0200)
committerStefan Weil <sw@weilnetz.de>
Thu, 24 Sep 2015 18:52:28 +0000 (24 20:52 +0200)
tree344a675e9af8e8885444247dc18aab45710bdcc0
parenta246a01631f90230374c2b8ffce608232e2aa654
qemu-thread: add a fast path to the Win32 QemuEvent

QemuEvents are used heavily by call_rcu.  We do not want them to be slow,
but the current implementation does a kernel call on every invocation
of qemu_event_* and won't cut it.

So, wrap a Win32 manual-reset event with a fast userspace path.  The
states and transitions are the same as for the futex and mutex/condvar
implementations, but the slow path is different of course.  The idea
is to reset the Win32 event lazily, as part of a test-reset-test-wait
sequence.  Such a sequence is, indeed, how QemuEvents are used by
RCU and other subsystems!

The patch includes a formal model of the algorithm.

Tested-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
docs/win32-qemu-event.promela [new file with mode: 0644]
include/qemu/thread-win32.h
util/qemu-thread-win32.c