[RFC v9 14/27] virtio-blk: Use pthreads instead of qemu-thread

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <stefanha@xxxxxxxxxxxxxxxxxx>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux