On Sat, Jul 16, 2011 at 11:08 AM, Blue Swirl <blauwir...@gmail.com> wrote: > On Mon, Jun 27, 2011 at 12:21 PM, Stefan Hajnoczi <stefa...@gmail.com> wrote: >> Here is the latest version of the coroutine series with Mac OS X fixes from >> Andreas Färber <andreas.faer...@web.de>. >> >> QEMU is event-driven and suffers when blocking operations are performed >> because >> VM execution may be stopped until the operation completes. Therefore many >> operations that could block are performed asynchronously and a callback is >> invoked when the operation has completed. This allows QEMU to continue >> executing while the operation is pending. >> >> The downside to callbacks is that they split up code into many smaller >> functions, each of which is a single step in a state machine that quickly >> becomes complex and hard to understand. Callback functions also result in >> lots >> of noise as variables are packed and unpacked into temporary structs that >> pass >> state to the callback function. >> >> This patch series introduces coroutines as a solution for writing >> asynchronous >> code while still having a nice sequential control flow. The semantics are >> explained in the second patch. The fourth patch adds automated tests. >> >> A nice feature of coroutines is that it is relatively easy to take >> synchronous >> code and lift it into a coroutine to make it asynchronous. Work has been >> done >> to move qcow2 request processing into coroutines and thereby make it >> asynchronous (today qcow2 will perform synchronous metadata accesses). This >> qcow2 work is still ongoing and not quite ready for mainline yet. >> >> Coroutines are also being used for virtfs (virtio-9p) so I have submitted >> this >> patch now because virtfs patches that depend on coroutines are being >> published. > > Coroutines seem to work fine on OpenBSD (Sparc64, also tests are > passed) and mingw32, with a few minor issues. > > With simpletrace enabled there is a link failure: > $ make test-coroutine > LINK test-coroutine > simpletrace.o: In function `get_clock': > /src/qemu/qemu-timer.h:117: undefined reference to `use_rt_clock' > > This can be fixed for example by adding qemu-timer-common.o to the > list of linked objects.
Do you want me to send a patch to add qemu-timer-common.o or is this easy to do while merging? > I can't compile coroutine tests for Mingw32 because of this: > $ make test-coroutine > CC test-coroutine.o > In file included from > /usr/local/i686-mingw32msvc/include/glib-2.0/glib/galloca.h:30:0, > from /usr/local/i686-mingw32msvc/include/glib-2.0/glib.h:30, > from /src/qemu/test-coroutine.c:14: > /usr/local/i686-mingw32msvc/include/glib-2.0/glib/gtypes.h:30:24: > fatal error: glibconfig.h: No such file or directory > > I used glib win32 zips from > http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.12/, is there a > better site? Otherwise QEMU builds fine and runs under Wine nicely. Paolo, Stefan Weil: Any ideas regarding w32 glib headers above? Stefan