xref: /qemu/include/block/thread-pool.h (revision aef04fc7)
1737e150eSPaolo Bonzini /*
2737e150eSPaolo Bonzini  * QEMU block layer thread pool
3737e150eSPaolo Bonzini  *
4737e150eSPaolo Bonzini  * Copyright IBM, Corp. 2008
5737e150eSPaolo Bonzini  * Copyright Red Hat, Inc. 2012
6737e150eSPaolo Bonzini  *
7737e150eSPaolo Bonzini  * Authors:
8737e150eSPaolo Bonzini  *  Anthony Liguori   <aliguori@us.ibm.com>
9737e150eSPaolo Bonzini  *  Paolo Bonzini     <pbonzini@redhat.com>
10737e150eSPaolo Bonzini  *
11737e150eSPaolo Bonzini  * This work is licensed under the terms of the GNU GPL, version 2.  See
12737e150eSPaolo Bonzini  * the COPYING file in the top-level directory.
13737e150eSPaolo Bonzini  *
14737e150eSPaolo Bonzini  * Contributions after 2012-01-13 are licensed under the terms of the
15737e150eSPaolo Bonzini  * GNU GPL, version 2 or (at your option) any later version.
16737e150eSPaolo Bonzini  */
17737e150eSPaolo Bonzini 
18737e150eSPaolo Bonzini #ifndef QEMU_THREAD_POOL_H
19175de524SMarkus Armbruster #define QEMU_THREAD_POOL_H
20737e150eSPaolo Bonzini 
21e2c1c34fSMarkus Armbruster #include "block/aio.h"
22737e150eSPaolo Bonzini 
2371ad4713SNicolas Saenz Julienne #define THREAD_POOL_MAX_THREADS_DEFAULT         64
2471ad4713SNicolas Saenz Julienne 
25737e150eSPaolo Bonzini typedef int ThreadPoolFunc(void *opaque);
26737e150eSPaolo Bonzini 
27f7311cccSStefan Hajnoczi typedef struct ThreadPool ThreadPool;
28f7311cccSStefan Hajnoczi 
29f7311cccSStefan Hajnoczi ThreadPool *thread_pool_new(struct AioContext *ctx);
30f7311cccSStefan Hajnoczi void thread_pool_free(ThreadPool *pool);
31f7311cccSStefan Hajnoczi 
320fdb7311SEmanuele Giuseppe Esposito /*
330fdb7311SEmanuele Giuseppe Esposito  * thread_pool_submit* API: submit I/O requests in the thread's
340fdb7311SEmanuele Giuseppe Esposito  * current AioContext.
350fdb7311SEmanuele Giuseppe Esposito  */
36aef04fc7SEmanuele Giuseppe Esposito BlockAIOCB *thread_pool_submit_aio(ThreadPoolFunc *func, void *arg,
37097310b5SMarkus Armbruster                                    BlockCompletionFunc *cb, void *opaque);
38aef04fc7SEmanuele Giuseppe Esposito int coroutine_fn thread_pool_submit_co(ThreadPoolFunc *func, void *arg);
39aef04fc7SEmanuele Giuseppe Esposito void thread_pool_submit(ThreadPoolFunc *func, void *arg);
400fdb7311SEmanuele Giuseppe Esposito 
4171ad4713SNicolas Saenz Julienne void thread_pool_update_params(ThreadPool *pool, struct AioContext *ctx);
42737e150eSPaolo Bonzini 
43737e150eSPaolo Bonzini #endif
44