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