aboutsummaryrefslogtreecommitdiff
path: root/thread-pool.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-02-23 13:23:34 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2012-10-31 10:37:48 +0100
commitd354c7eccf5466ec2715a03d3f33dbfd6680dcc5 (patch)
tree1c77f58c201cb14dc7f13d45a1e4cd70ce2f30d9 /thread-pool.h
parent38b14db34e16bb0ae1f28b7ddccb6aa11a2a96a1 (diff)
aio: add generic thread-pool facility
Add a generic thread-pool. The code is roughly based on posix-aio-compat.c, with some changes, especially the following: - use QemuSemaphore instead of QemuCond; - separate the state of the thread from the return code of the worker function. The return code is totally opaque for the thread pool; - do not busy wait when doing cancellation. A more generic threadpool (but still specific to I/O so that in the future it can use special scheduling classes or PI mutexes) can have many uses: it allows more flexibility in raw-posix.c and can more easily be extended to Win32, and it will also be used to do an msync of the persistent bitmap. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'thread-pool.h')
-rw-r--r--thread-pool.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/thread-pool.h b/thread-pool.h
new file mode 100644
index 0000000000..378a4ac9f9
--- /dev/null
+++ b/thread-pool.h
@@ -0,0 +1,34 @@
+/*
+ * QEMU block layer thread pool
+ *
+ * Copyright IBM, Corp. 2008
+ * Copyright Red Hat, Inc. 2012
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ * Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ */
+
+#ifndef QEMU_THREAD_POOL_H
+#define QEMU_THREAD_POOL_H 1
+
+#include "qemu-common.h"
+#include "qemu-queue.h"
+#include "qemu-thread.h"
+#include "qemu-coroutine.h"
+#include "block_int.h"
+
+typedef int ThreadPoolFunc(void *opaque);
+
+BlockDriverAIOCB *thread_pool_submit_aio(ThreadPoolFunc *func, void *arg,
+ BlockDriverCompletionFunc *cb, void *opaque);
+int coroutine_fn thread_pool_submit_co(ThreadPoolFunc *func, void *arg);
+void thread_pool_submit(ThreadPoolFunc *func, void *arg);
+
+#endif