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