xref: /kvmtool/include/kvm/threadpool.h (revision df0c7f571eb7fad7895e0930cd695eb039b1fe57)
1d60bafe5SSasha Levin #ifndef KVM__THREADPOOL_H
2d60bafe5SSasha Levin #define KVM__THREADPOOL_H
3d60bafe5SSasha Levin 
4*df0c7f57SSasha Levin #include "kvm/mutex.h"
5*df0c7f57SSasha Levin 
6*df0c7f57SSasha Levin #include <linux/list.h>
7*df0c7f57SSasha Levin 
8d60bafe5SSasha Levin struct kvm;
9d60bafe5SSasha Levin 
10d60bafe5SSasha Levin typedef void (*kvm_thread_callback_fn_t)(struct kvm *kvm, void *data);
11d60bafe5SSasha Levin 
12*df0c7f57SSasha Levin struct thread_pool__job {
13*df0c7f57SSasha Levin 	kvm_thread_callback_fn_t	callback;
14*df0c7f57SSasha Levin 	struct kvm			*kvm;
15*df0c7f57SSasha Levin 	void				*data;
16*df0c7f57SSasha Levin 
17*df0c7f57SSasha Levin 	int				signalcount;
18*df0c7f57SSasha Levin 	pthread_mutex_t			mutex;
19*df0c7f57SSasha Levin 
20*df0c7f57SSasha Levin 	struct list_head		queue;
21*df0c7f57SSasha Levin };
22*df0c7f57SSasha Levin 
23*df0c7f57SSasha Levin static inline void thread_pool__init_job(struct thread_pool__job *job, struct kvm *kvm, kvm_thread_callback_fn_t callback, void *data)
24*df0c7f57SSasha Levin {
25*df0c7f57SSasha Levin 	*job = (struct thread_pool__job) {
26*df0c7f57SSasha Levin 		.kvm		= kvm,
27*df0c7f57SSasha Levin 		.callback	= callback,
28*df0c7f57SSasha Levin 		.data		= data,
29*df0c7f57SSasha Levin 		.mutex		= PTHREAD_MUTEX_INITIALIZER,
30*df0c7f57SSasha Levin 	};
31*df0c7f57SSasha Levin }
32*df0c7f57SSasha Levin 
33d60bafe5SSasha Levin int thread_pool__init(unsigned long thread_count);
34d60bafe5SSasha Levin 
35*df0c7f57SSasha Levin void thread_pool__do_job(struct thread_pool__job *job);
36d60bafe5SSasha Levin 
37d60bafe5SSasha Levin #endif
38