Re: [PATCH RFC] v5 expedited "big hammer" RCU grace periods
From: Paul E. McKenney <hidden>
Date: 2009-05-18 14:40:53
Also in:
lkml, netfilter-devel
From: Paul E. McKenney <hidden>
Date: 2009-05-18 14:40:53
Also in:
lkml, netfilter-devel
On Mon, May 18, 2009 at 02:59:52PM +0800, Lai Jiangshan wrote:
Paul E. McKenney wrote:quoted
+void sched_expedited_wake(void *unused) +{ + mutex_lock(&__get_cpu_var(sched_expedited_done_mutex)); + if (__get_cpu_var(sched_expedited_done_qs) == + SCHED_EXPEDITED_QS_DONE_QS) { + __get_cpu_var(sched_expedited_done_qs) = + SCHED_EXPEDITED_QS_NEED_QS; + wake_up(&__get_cpu_var(sched_expedited_qs_wq)); + } + mutex_unlock(&__get_cpu_var(sched_expedited_done_mutex)); +}[...]quoted
+ get_online_cpus(); + preempt_disable(); + mycpu = smp_processor_id(); + smp_call_function(sched_expedited_wake, NULL, 1);sched_expedited_wake() calls mutex_lock() which may sleep?
Good eyes! Fixing this and the failure to release this lock in krcu_sched_expedited_percpu() allows it to survive 10 hours of rcutorture running in parallel with onlining/offlining random CPUs.
And I think you have re-implement workqueue.
Hmmm... I suppose I could use schedule_work(), though I am concerned about interference from other work. But I will give this some thought. Thanx, Paul