Messages in this thread | | | Date | Mon, 8 Mar 2004 14:36:58 -0800 | From | Andrew Morton <> | Subject | Re: more efficient current_is_keventd macro? [was Re: [lhcs-devel] Re: Kthread_create() never returns when called from worker_thread] |
| |
Srivatsa Vaddagiri <vatsa@in.ibm.com> wrote: > > current_is_keventd() macro checks "current" with the per-cpu > thread of _all_ possible cpus attached to keventd_wq. Can't it just check > against the per-cpu thread of _current_ cpu alone (since the per-cpu workqueue > threads are anyway bound only to their cpus)?
Seems that way, yes.
> int current_is_keventd(void) > { > struct cpu_workqueue_struct *cwq; > - int cpu; > + int cpu = smp_processor_id(); > > 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) > + return 1; > + else > + return 0; > }
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?
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |