From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53057) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrVrt-0005wg-Vq for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:08:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SrVrm-0000l5-0e for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:08:49 -0400 Received: from e06smtp17.uk.ibm.com ([195.75.94.113]:48074) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrVrl-0000kZ-O6 for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:08:41 -0400 Received: from /spool/local by e06smtp17.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 18 Jul 2012 16:08:40 +0100 Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q6IF8bCH2195566 for ; Wed, 18 Jul 2012 16:08:37 +0100 Received: from d06av02.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q6IF8aqm003694 for ; Wed, 18 Jul 2012 09:08:36 -0600 From: Stefan Hajnoczi Date: Wed, 18 Jul 2012 16:07:41 +0100 Message-Id: <1342624074-24650-15-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1342624074-24650-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1342624074-24650-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC v9 14/27] virtio-blk: Use pthreads instead of qemu-thread List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Anthony Liguori , Stefan Hajnoczi , kvm@vger.kernel.org, "Michael S. Tsirkin" , Khoa Huynh , Paolo Bonzini , Asias He Using qemu-thread.h seemed like a nice idea but it has two limitations: 1. QEMU needs to be built with --enable-io-thread 2. qemu-kvm doesn't build with --enable-io-thread For now just copy the pthread_create() code straight into virtio-blk.c. Signed-off-by: Stefan Hajnoczi --- hw/virtio-blk.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index 7ae3c56..1616be5 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -11,6 +11,7 @@ * */ +#include #include #include "qemu-common.h" #include "block_int.h" @@ -47,7 +48,7 @@ typedef struct { DeviceState *qdev; bool data_plane_started; - QemuThread data_plane_thread; + pthread_t data_plane_thread; Vring vring; /* virtqueue vring */ @@ -268,7 +269,16 @@ static void data_plane_start(VirtIOBlock *s) } event_poll_add(&s->event_poll, &s->io_handler, ioq_get_notifier(&s->ioqueue), handle_io); - qemu_thread_create(&s->data_plane_thread, data_plane_thread, s, QEMU_THREAD_JOINABLE); + /* Create data plane thread */ + sigset_t set, oldset; + sigfillset(&set); + pthread_sigmask(SIG_SETMASK, &set, &oldset); + if (pthread_create(&s->data_plane_thread, NULL, data_plane_thread, s) != 0) + { + fprintf(stderr, "pthread create failed: %m\n"); + exit(1); + } + pthread_sigmask(SIG_SETMASK, &oldset, NULL); s->data_plane_started = true; } @@ -279,7 +289,7 @@ static void data_plane_stop(VirtIOBlock *s) /* Tell data plane thread to stop and then wait for it to return */ event_poll_stop(&s->event_poll); - pthread_join(s->data_plane_thread.thread, NULL); + pthread_join(s->data_plane_thread, NULL); ioq_cleanup(&s->ioqueue); -- 1.7.10.4