xref: /kvmtool/include/kvm/threadpool.h (revision 7a7f45421f3a04e25d274c207ddd110af69da1bb)
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