summaryrefslogtreecommitdiff
path: root/kernel/workqueue_internal.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-01-18 14:05:56 -0800
committerTejun Heo <tj@kernel.org>2013-01-18 14:05:56 -0800
commit84b233adcca3cacd5cfa8013a5feda7a3db4a9af (patch)
tree3d1f4a7f5f1d27dc08bb661691fd1470acf497a5 /kernel/workqueue_internal.h
parent2eaebdb33e1911c0cf3d44fd3596c42c6f502fab (diff)
downloadlwn-84b233adcca3cacd5cfa8013a5feda7a3db4a9af.tar.gz
lwn-84b233adcca3cacd5cfa8013a5feda7a3db4a9af.zip
workqueue: implement current_is_async()
This function queries whether %current is an async worker executing an async item. This will be used to implement warning on synchronous request_module() from async workers. Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/workqueue_internal.h')
-rw-r--r--kernel/workqueue_internal.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/workqueue_internal.h b/kernel/workqueue_internal.h
index 02549fa04587..cc35e7e62091 100644
--- a/kernel/workqueue_internal.h
+++ b/kernel/workqueue_internal.h
@@ -8,6 +8,7 @@
#define _KERNEL_WORKQUEUE_INTERNAL_H
#include <linux/workqueue.h>
+#include <linux/kthread.h>
struct global_cwq;
struct worker_pool;
@@ -44,6 +45,16 @@ struct worker {
struct workqueue_struct *rescue_wq; /* I: the workqueue to rescue */
};
+/**
+ * current_wq_worker - return struct worker if %current is a workqueue worker
+ */
+static inline struct worker *current_wq_worker(void)
+{
+ if (current->flags & PF_WQ_WORKER)
+ return kthread_data(current);
+ return NULL;
+}
+
/*
* Scheduler hooks for concurrency managed workqueue. Only to be used from
* sched.c and workqueue.c.