Re: more efficient current_is_keventd macro? [was Re: [lhcs-devel] Re: Kthread_create() never returns when called from worker_thread]

From: Srivatsa Vaddagiri
Date: Tue Mar 09 2004 - 08:40:36 EST


On Mon, Mar 08, 2004 at 02:36:58PM -0800, Andrew Morton wrote:
> Is racy in the presence of preemption. Please replace smp_processor_id()
> with get_cpu(), stick a put_cpu() at the end, avoid having two function
> return points, test it and send me the diff?

Hi Andrew,
I had considered preemption and had thought using just
smp_processor_id() should be safe, since anyway the per-cpu kevent
thread is bound to its cpu alone.

Patch below is booted/tested against 2.6.4-rc2-mm1 on a 4-way x86 SMP box.
For testing, I basically called call_usermodehelper from inside a
work function (activated using schedule_work) and checked that
current_is_keventd() macro was returning true.

--- workqueue.c.org 2004-03-09 11:34:30.000000000 +0530
+++ workqueue.c 2004-03-09 19:06:51.000000000 +0530
@@ -374,16 +374,17 @@
int current_is_keventd(void)
{
struct cpu_workqueue_struct *cwq;
- int cpu;
+ int cpu = smp_processor_id();
+ 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;
+
}

#ifdef CONFIG_HOTPLUG_CPU

--


Thanks and Regards,
Srivatsa Vaddagiri,
Linux Technology Center,
IBM Software Labs,
Bangalore, INDIA - 560017
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/