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