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

TOMOYO Linux Cross Reference
Linux/kernel/workqueue_internal.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ 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;  /* K: work being processed and its */
 32         work_func_t             current_func;   /* K: function */
 33         struct pool_workqueue   *current_pwq;   /* K: pwq */
 34         u64                     current_at;     /* K: runtime at start or last wakeup */
 35         unsigned int            current_color;  /* K: color */
 36 
 37         int                     sleeping;       /* S: is worker sleeping? */
 38 
 39         /* used by the scheduler to determine a worker's last known identity */
 40         work_func_t             last_func;      /* K: last work's fn */
 41 
 42         struct list_head        scheduled;      /* L: scheduled works */
 43 
 44         struct task_struct      *task;          /* I: worker task */
 45         struct worker_pool      *pool;          /* A: the associated pool */
 46                                                 /* L: for rescuers */
 47         struct list_head        node;           /* A: anchored at pool->workers */
 48                                                 /* A: runs through worker->node */
 49 
 50         unsigned long           last_active;    /* K: last active timestamp */
 51         unsigned int            flags;          /* L: flags */
 52         int                     id;             /* I: worker id */
 53 
 54         /*
 55          * Opaque string set with work_set_desc().  Printed out with task
 56          * dump for debugging - WARN, BUG, panic or sysrq.
 57          */
 58         char                    desc[WORKER_DESC_LEN];
 59 
 60         /* used only by rescuers to point to the target workqueue */
 61         struct workqueue_struct *rescue_wq;     /* I: the workqueue to rescue */
 62 };
 63 
 64 /**
 65  * current_wq_worker - return struct worker if %current is a workqueue worker
 66  */
 67 static inline struct worker *current_wq_worker(void)
 68 {
 69         if (in_task() && (current->flags & PF_WQ_WORKER))
 70                 return kthread_data(current);
 71         return NULL;
 72 }
 73 
 74 /*
 75  * Scheduler hooks for concurrency managed workqueue.  Only to be used from
 76  * sched/ and workqueue.c.
 77  */
 78 void wq_worker_running(struct task_struct *task);
 79 void wq_worker_sleeping(struct task_struct *task);
 80 void wq_worker_tick(struct task_struct *task);
 81 work_func_t wq_worker_last_func(struct task_struct *task);
 82 
 83 #endif /* _KERNEL_WORKQUEUE_INTERNAL_H */
 84 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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.

sflogo.php