[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v9 14/27] virtio-blk: Use pthreads instead of qemu-thr
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [RFC v9 14/27] virtio-blk: Use pthreads instead of qemu-thread |
Date: |
Wed, 18 Jul 2012 16:07:41 +0100 |
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 <address@hidden>
---
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 <pthread.h>
#include <libaio.h>
#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
- [Qemu-devel] [RFC v9 06/27] virtio-blk: Take PCI memory range into account, (continued)
[Qemu-devel] [RFC v9 12/27] virtio-blk: Add workaround for BUG_ON() dependency in virtio_ring.h, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 11/27] virtio-blk: Indirect vring and flush support, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 14/27] virtio-blk: Use pthreads instead of qemu-thread,
Stefan Hajnoczi <=
[Qemu-devel] [RFC v9 16/27] virtio-blk: Kick data plane thread using event notifier set, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 08/27] virtio-blk: Read requests from the vring, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 18/27] virtio-blk: Call ioctl() directly instead of irqfd, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 21/27] virtio-blk: Add basic request merging, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 20/27] virtio-blk: Add ioscheduler to detect mergable requests, Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 26/27] msix: use upstream kvm_irqchip_set_irq(), Stefan Hajnoczi, 2012/07/18
[Qemu-devel] [RFC v9 19/27] virtio-blk: Disable guest->host notifies while processing vring, Stefan Hajnoczi, 2012/07/18