summaryrefslogtreecommitdiff
path: root/kernel/workqueue.c
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-03-11 16:18:00 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-03-11 16:18:00 -0800
commit6551f0aa45b999eb00d412c8aec4f47084d35f56 (patch)
treeb6718c4774921a17d81e755109ff60f89ac7b886 /kernel/workqueue.c
parent127419b166cc6653900333f1826b5b47e6f18f2c (diff)
[PATCH] current_is_keventd() speedup
From: Srivatsa Vaddagiri <vatsa@in.ibm.com> current_is_keventd() doesn't need to search across all the CPUs to identify itself.
Diffstat (limited to 'kernel/workqueue.c')
-rw-r--r--kernel/workqueue.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index eee885ccf539..2e94fd93abe6 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -333,16 +333,17 @@ int keventd_up(void)
int current_is_keventd(void)
{
struct cpu_workqueue_struct *cwq;
- int cpu;
+ int cpu = smp_processor_id(); /* preempt-safe: keventd is per-cpu */
+ int ret = 0;
BUG_ON(!keventd_wq);
- for_each_cpu(cpu) {
- cwq = keventd_wq->cpu_wq + cpu;
- if (current == cwq->thread)
- return 1;
- }
- return 0;
+ cwq = keventd_wq->cpu_wq + cpu;
+ if (current == cwq->thread)
+ ret = 1;
+
+ return ret;
+
}
void init_workqueues(void)