~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/kernel/workqueue_internal.h

Version: ~ [ linux-5.1-rc5 ] ~ [ linux-5.0.7 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.34 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.111 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.168 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.178 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.138 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.65 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp