-/* Have to duplicate all these definitions from kernel/workqueue.c */
-/* Extracts only */
-
-enum {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- NR_WORKER_POOLS = 2, /* # worker pools per gcwq */
-#endif
- BUSY_WORKER_HASH_ORDER = 6, /* 64 pointers */
- BUSY_WORKER_HASH_SIZE = 1 << BUSY_WORKER_HASH_ORDER,
-};
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
-struct worker_pool {
- struct global_cwq *gcwq; /* I: the owning gcwq */
- unsigned int flags; /* X: flags */
-
- struct list_head worklist; /* L: list of pending works */
- int nr_workers; /* L: total number of workers */
- int nr_idle; /* L: currently idle ones */
-
- struct list_head idle_list; /* X: list of idle workers */
- struct timer_list idle_timer; /* L: worker idle timeout */
- struct timer_list mayday_timer; /* L: SOS timer for workers */
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
- struct mutex assoc_mutex; /* protect GCWQ_DISASSOCUATED */
-#else
- struct mutex manager_mutex; /* mutex manager should hold */
-#endif
- struct ida worker_ida; /* L: for worker IDs */
-};
-
-struct global_cwq {
- spinlock_t lock; /* the gcwq lock */
- unsigned int cpu; /* I: the associated cpu */
- unsigned int flags; /* L: GCWQ_* flags */
-
- /* workers are chained either in busy_hash or pool idle_list */
- struct hlist_head busy_hash[BUSY_WORKER_HASH_SIZE];
- /* L: hash of busy workers */
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
- struct worker_pool pools[NR_WORKER_POOLS];
- /* normal and highpri pools */
-#else
- struct worker_pool pools[2]; /* normal and highpri pools */
-
- wait_queue_head_t rebind_hold; /* rebind hold wait */
-#endif
-} ____cacheline_aligned_in_smp;
-
-#else
-
-struct global_cwq {
- spinlock_t lock; /* the gcwq lock */
- struct list_head worklist; /* L: list of pending works */
- unsigned int cpu; /* I: the associated cpu */
- unsigned int flags; /* L: GCWQ_* flags */
-
- int nr_workers; /* L: total number of workers */
- int nr_idle; /* L: currently idle ones */
-
- /* workers are chained either in the idle_list or busy_hash */
- struct list_head idle_list; /* X: list of idle workers */
- struct hlist_head busy_hash[BUSY_WORKER_HASH_SIZE];
- /* L: hash of busy workers */
-
- struct timer_list idle_timer; /* L: worker idle timeout */
- struct timer_list mayday_timer; /* L: SOS timer for dworkers */
-
- struct ida worker_ida; /* L: for worker IDs */
-
- struct task_struct *trustee; /* L: for gcwq shutdown */
- unsigned int trustee_state; /* L: trustee state */
- wait_queue_head_t trustee_wait; /* trustee wait */
- struct worker *first_idle; /* L: first idle worker */
-} ____cacheline_aligned_in_smp;
-
-#endif
-
-struct cpu_workqueue_struct {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct worker_pool *pool; /* I: The associated pool */
-#else
- struct global_cwq *gcwq; /* I: the associated gcwq */
-#endif
- struct workqueue_struct *wq; /* I: the owning workqueue */
- int work_color; /* L: current color */
- int flush_color; /* L: flushing color */
- int nr_in_flight[WORK_NR_COLORS];
- /* L: nr of in_flight works */
- int nr_active; /* L: nr of active works */
- int max_active; /* L: max active works */
- struct list_head delayed_works; /* L: delayed works */
-};
-