Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/kernel/workqueue_internal.h

  1 /*
  2  * kernel/workqueue_internal.h
  3  *
  4  * Workqueue internal header file.  Only to be included by workqueue and
  5  * core kernel subsystems.
  6  */
  7 #ifndef _KERNEL_WORKQUEUE_INTERNAL_H
  8 #define _KERNEL_WORKQUEUE_INTERNAL_H
  9 
 10 #include <linux/workqueue.h>
 11 #include <linux/kthread.h>
 12 
 13 struct worker_pool;
 14 
 15 /*
 16  * The poor guys doing the actual heavy lifting.  All on-duty workers are
 17  * either serving the manager role, on idle list or on busy hash.  For
 18  * details on the locking annotation (L, I, X...), refer to workqueue.c.
 19  *
 20  * Only to be used in workqueue and async.
 21  */
 22 struct worker {
 23         /* on idle list while idle, on busy hash table while busy */
 24         union {
 25                 struct list_head        entry;  /* L: while idle */
 26                 struct hlist_node       hentry; /* L: while busy */
 27         };
 28 
 29         struct work_struct      *current_work;  /* L: work being processed */
 30         work_func_t             current_func;   /* L: current_work's fn */
 31         struct pool_workqueue   *current_pwq; /* L: current_work's pwq */
 32         bool                    desc_valid;     /* ->desc is valid */
 33         struct list_head        scheduled;      /* L: scheduled works */
 34 
 35         /* 64 bytes boundary on 64bit, 32 on 32bit */
 36 
 37         struct task_struct      *task;          /* I: worker task */
 38         struct worker_pool      *pool;          /* I: the associated pool */
 39                                                 /* L: for rescuers */
 40         struct list_head        node;           /* A: anchored at pool->workers */
 41                                                 /* A: runs through worker->node */
 42 
 43         unsigned long           last_active;    /* L: last active timestamp */
 44         unsigned int            flags;          /* X: flags */
 45         int                     id;             /* I: worker id */
 46 
 47         /*
 48          * Opaque string set with work_set_desc().  Printed out with task
 49          * dump for debugging - WARN, BUG, panic or sysrq.
 50          */
 51         char                    desc[WORKER_DESC_LEN];
 52 
 53         /* used only by rescuers to point to the target workqueue */
 54         struct workqueue_struct *rescue_wq;     /* I: the workqueue to rescue */
 55 };
 56 
 57 /**
 58  * current_wq_worker - return struct worker if %current is a workqueue worker
 59  */
 60 static inline struct worker *current_wq_worker(void)
 61 {
 62         if (current->flags & PF_WQ_WORKER)
 63                 return kthread_data(current);
 64         return NULL;
 65 }
 66 
 67 /*
 68  * Scheduler hooks for concurrency managed workqueue.  Only to be used from
 69  * sched/core.c and workqueue.c.
 70  */
 71 void wq_worker_waking_up(struct task_struct *task, int cpu);
 72 struct task_struct *wq_worker_sleeping(struct task_struct *task);
 73 
 74 #endif /* _KERNEL_WORKQUEUE_INTERNAL_H */
 75 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us