xref: /kvmtool/include/kvm/threadpool.h (revision d3476f7d3bb7cee0b620cf207c168cb4f5b5c41e)
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 
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 }
32 
33 int thread_pool__init(struct kvm *kvm);
34 int thread_pool__exit(struct kvm *kvm);
35 
36 void thread_pool__do_job(struct thread_pool__job *job);
37 
38 #endif
39