1 #ifndef KVM__THREADPOOL_H
2 #define KVM__THREADPOOL_H
3
4 #include "kvm/mutex.h"
5
6 #include <linux/list.h>
7
8 struct kvm;
9
10 typedef void (*kvm_thread_callback_fn_t)(struct kvm *kvm, void *data);
11
12 struct thread_pool__job {
13 kvm_thread_callback_fn_t callback;
14 struct kvm *kvm;
15 void *data;
16
17 int signalcount;
18 struct mutex mutex;
19
20 struct list_head queue;
21 };
22
thread_pool__init_job(struct thread_pool__job * job,struct kvm * kvm,kvm_thread_callback_fn_t callback,void * data)23 static inline void thread_pool__init_job(struct thread_pool__job *job, struct kvm *kvm, kvm_thread_callback_fn_t callback, void *data)
24 {
25 *job = (struct thread_pool__job) {
26 .kvm = kvm,
27 .callback = callback,
28 .data = data,
29 .mutex = MUTEX_INITIALIZER,
30 };
31 INIT_LIST_HEAD(&job->queue);
32 }
33
34 int thread_pool__init(struct kvm *kvm);
35 int thread_pool__exit(struct kvm *kvm);
36
37 void thread_pool__do_job(struct thread_pool__job *job);
38 void thread_pool__cancel_job(struct thread_pool__job *job);
39
40 #endif
41