From: Srivatsa Vaddagiri current_is_keventd() doesn't need to search across all the CPUs to identify itself. --- 25-akpm/kernel/workqueue.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) diff -puN kernel/workqueue.c~current_is_keventd-speedup kernel/workqueue.c --- 25/kernel/workqueue.c~current_is_keventd-speedup Tue Mar 9 13:25:03 2004 +++ 25-akpm/kernel/workqueue.c Tue Mar 9 13:25:57 2004 @@ -344,16 +344,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) _