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; 18*d3476f7dSSasha Levin struct mutex mutex; 19df0c7f57SSasha Levin 20df0c7f57SSasha Levin struct list_head queue; 21df0c7f57SSasha Levin }; 22df0c7f57SSasha Levin 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, 29*d3476f7dSSasha Levin .mutex = MUTEX_INITIALIZER, 30df0c7f57SSasha Levin }; 31df0c7f57SSasha Levin } 32df0c7f57SSasha Levin 33f6a3c571SSasha Levin int thread_pool__init(struct kvm *kvm); 34f6a3c571SSasha Levin int thread_pool__exit(struct kvm *kvm); 35d60bafe5SSasha Levin 36df0c7f57SSasha Levin void thread_pool__do_job(struct thread_pool__job *job); 37d60bafe5SSasha Levin 38d60bafe5SSasha Levin #endif 39