From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vr6BL-0001By-5k for qemu-devel@nongnu.org; Thu, 12 Dec 2013 08:20:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vr6BF-0001NI-5p for qemu-devel@nongnu.org; Thu, 12 Dec 2013 08:19:59 -0500 Received: from mx1.redhat.com ([209.132.183.28]:63373) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vr6BE-0001N1-UE for qemu-devel@nongnu.org; Thu, 12 Dec 2013 08:19:53 -0500 From: Stefan Hajnoczi Date: Thu, 12 Dec 2013 14:19:37 +0100 Message-Id: <1386854384-1992-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [RFC 0/7] dataplane: switch to N:M devices-per-thread model List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Paolo Bonzini , Michael Roth , Stefan Hajnoczi This series moves the event loop thread out of dataplane code. It makes -iothread id=foo a separate concept. This makes it possible to bind several devices to the same iothread. Syntax: qemu -iothread id=iothread0 \ -device virtio-blk-pci,iothread=iothread0,x-data-plane=on,... For backwards-compatibility the iothread= parameter can be omitted. A per-device IOThread will be created behind the scenes (just like the old 1:1 threading model). This series includes the aio_context_acquire/release API which makes it easy to synchronize access to AioContext across threads. The IOThread object is really a stand-in for Michael Roth's QContext. They both have the same purpose but I needed something to develop against while QContext is unfinished. In order to make progress I'd like to agree on the user-visible API that IOThread/QContext presents. That way QContext can be implemented step-by-step without holding up dataplane. Finally, the -iothread command-line option will soon be replaced with -object. I am following Igor's work in the area and will try to help get that code in. Stefan Hajnoczi (7): rfifolock: add recursive FIFO lock aio: add aio_context_acquire() and aio_context_release() iothread: add I/O thread object iothread: command-line option qdev: add get_pointer_and_free() for temporary strings iothread: add "iothread" qdev property type dataplane: replace internal thread with IOThread Makefile.objs | 1 + async.c | 18 +++++ hw/block/dataplane/virtio-blk.c | 91 ++++++++++++----------- hw/core/qdev-properties-system.c | 65 +++++++++++++++++ include/block/aio.h | 18 +++++ include/hw/qdev-properties.h | 3 + include/hw/virtio/virtio-blk.h | 8 ++- include/qemu/rfifolock.h | 54 ++++++++++++++ include/sysemu/iothread.h | 32 +++++++++ include/sysemu/sysemu.h | 1 + iothread.c | 152 +++++++++++++++++++++++++++++++++++++++ qemu-options.hx | 8 +++ tests/Makefile | 2 + tests/test-aio.c | 58 +++++++++++++++ tests/test-rfifolock.c | 90 +++++++++++++++++++++++ util/Makefile.objs | 1 + util/rfifolock.c | 78 ++++++++++++++++++++ vl.c | 12 ++++ 18 files changed, 647 insertions(+), 45 deletions(-) create mode 100644 include/qemu/rfifolock.h create mode 100644 include/sysemu/iothread.h create mode 100644 iothread.c create mode 100644 tests/test-rfifolock.c create mode 100644 util/rfifolock.c -- 1.8.4.2