Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-11 Thread Paul E. McKenney
On Mon, Aug 11, 2014 at 01:57:06PM +0200, Peter Zijlstra wrote: > On Sun, Aug 10, 2014 at 08:30:48PM -0700, Paul E. McKenney wrote: > > On Sun, Aug 10, 2014 at 10:14:25AM +0200, Peter Zijlstra wrote: > > > > want want want, I want a damn pony but somehow I'm not getting one. Why > > > are they get

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-11 Thread Peter Zijlstra
On Sun, Aug 10, 2014 at 08:30:48PM -0700, Paul E. McKenney wrote: > On Sun, Aug 10, 2014 at 10:14:25AM +0200, Peter Zijlstra wrote: > > want want want, I want a damn pony but somehow I'm not getting one. Why > > are they getting this? > > We can only be glad that my daughters' old My Little Pony

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Paul E. McKenney
On Sun, Aug 10, 2014 at 05:00:05PM +0200, Peter Zijlstra wrote: > On Sat, Aug 09, 2014 at 06:38:29PM -0700, Paul E. McKenney wrote: > > On Sat, Aug 09, 2014 at 08:33:55PM +0200, Peter Zijlstra wrote: > > > On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > > > > > > > > > And on t

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Paul E. McKenney
On Sun, Aug 10, 2014 at 10:12:54AM +0200, Peter Zijlstra wrote: > On Sat, Aug 09, 2014 at 06:26:12PM -0700, Paul E. McKenney wrote: > > On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > > > On Sat, Aug 09, 2014 at 09:01:37AM -0700, Paul E. McKenney wrote: > > > > > That's so wrong i

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Paul E. McKenney
On Sun, Aug 10, 2014 at 10:14:25AM +0200, Peter Zijlstra wrote: > On Sat, Aug 09, 2014 at 06:29:24PM -0700, Paul E. McKenney wrote: > > On Sat, Aug 09, 2014 at 08:24:00PM +0200, Peter Zijlstra wrote: > > > On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > > > > How about we simply a

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Paul E. McKenney
On Sun, Aug 10, 2014 at 06:46:33PM +0200, Peter Zijlstra wrote: > On Sun, Aug 10, 2014 at 10:12:54AM +0200, Peter Zijlstra wrote: > > > Steven covered this earlier in this thread. One addition might be "For > > > the same reason that event tracing provides the _rcuidle suffix." > > > > I really d

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Peter Zijlstra
On Sun, Aug 10, 2014 at 10:12:54AM +0200, Peter Zijlstra wrote: > > Steven covered this earlier in this thread. One addition might be "For > > the same reason that event tracing provides the _rcuidle suffix." > > I really don't think its worth the cost. Entirely untested, but something like the

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Peter Zijlstra
On Sat, Aug 09, 2014 at 06:38:29PM -0700, Paul E. McKenney wrote: > On Sat, Aug 09, 2014 at 08:33:55PM +0200, Peter Zijlstra wrote: > > On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > > > > > > > And on that, you probably should change rcu_sched_rq() to read: > > > > > > > >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Peter Zijlstra
On Sat, Aug 09, 2014 at 06:29:24PM -0700, Paul E. McKenney wrote: > On Sat, Aug 09, 2014 at 08:24:00PM +0200, Peter Zijlstra wrote: > > On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > > > How about we simply assume 'idle' code, as defined by the rcu idle hooks > > > are safe? Why

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-10 Thread Peter Zijlstra
On Sat, Aug 09, 2014 at 06:26:12PM -0700, Paul E. McKenney wrote: > On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > > On Sat, Aug 09, 2014 at 09:01:37AM -0700, Paul E. McKenney wrote: > > > > That's so wrong its not funny. If you need some abortion to deal with > > > > NOHZ_FULL t

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Paul E. McKenney
On Sat, Aug 09, 2014 at 08:33:55PM +0200, Peter Zijlstra wrote: > On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > > > > > And on that, you probably should change rcu_sched_rq() to read: > > > > > > this_cpu_inc(rcu_sched_data.passed_quiesce); > > > > > > That avoids touchin

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Paul E. McKenney
On Sat, Aug 09, 2014 at 08:24:00PM +0200, Peter Zijlstra wrote: > On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > > How about we simply assume 'idle' code, as defined by the rcu idle hooks > > are safe? Why do we want to bend over backwards to cover this? > > The thing is, we alr

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Paul E. McKenney
On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > On Sat, Aug 09, 2014 at 09:01:37AM -0700, Paul E. McKenney wrote: > > > That's so wrong its not funny. If you need some abortion to deal with > > > NOHZ_FULL then put it under CONFIG_NOHZ_FULL, don't burden the entire > > > world wit

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Peter Zijlstra
On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > > > And on that, you probably should change rcu_sched_rq() to read: > > > > this_cpu_inc(rcu_sched_data.passed_quiesce); > > > > That avoids touching the per-cpu data offset. > > Hmmm... Interrupts are disabled, No they a

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Peter Zijlstra
On Sat, Aug 09, 2014 at 08:19:20PM +0200, Peter Zijlstra wrote: > How about we simply assume 'idle' code, as defined by the rcu idle hooks > are safe? Why do we want to bend over backwards to cover this? The thing is, we already have the special rcu trace hooks for tracing inside this rcu-idle sec

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Peter Zijlstra
On Sat, Aug 09, 2014 at 09:01:37AM -0700, Paul E. McKenney wrote: > > That's so wrong its not funny. If you need some abortion to deal with > > NOHZ_FULL then put it under CONFIG_NOHZ_FULL, don't burden the entire > > world with it. > > Peter, the polling approach actually -reduces- the common-cas

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Paul E. McKenney
On Sat, Aug 09, 2014 at 08:44:39AM -0400, Steven Rostedt wrote: > On Sat, 9 Aug 2014 08:15:14 +0200 > Peter Zijlstra wrote: > > > > As for idle tasks, I'm not sure about those, I think that we should say > > NO to anything that would require waking idle CPUs, push the pain to > > ftrace/kprobes,

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Paul E. McKenney
On Sat, Aug 09, 2014 at 08:15:14AM +0200, Peter Zijlstra wrote: > On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > > On Fri, Aug 08, 2014 at 09:13:26PM +0200, Peter Zijlstra wrote: > > > > > > > > > So I think you can make the entire thing work with > > > rcu_note_context_switc

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-09 Thread Steven Rostedt
On Sat, 9 Aug 2014 08:15:14 +0200 Peter Zijlstra wrote: > As for idle tasks, I'm not sure about those, I think that we should say > NO to anything that would require waking idle CPUs, push the pain to > ftrace/kprobes, we should _not_ be waking idle cpus. I agree, but I haven't had a chance to

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-08 Thread Peter Zijlstra
On Fri, Aug 08, 2014 at 01:58:26PM -0700, Paul E. McKenney wrote: > On Fri, Aug 08, 2014 at 09:13:26PM +0200, Peter Zijlstra wrote: > > > > > > So I think you can make the entire thing work with > > rcu_note_context_switch(). > > > > If we have the sync thing do something like: > > > > > >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-08 Thread Paul E. McKenney
On Fri, Aug 08, 2014 at 09:13:26PM +0200, Peter Zijlstra wrote: > > > So I think you can make the entire thing work with > rcu_note_context_switch(). > > If we have the sync thing do something like: > > > for_each_task(t) { > atomic_inc(&rcu_tasks); > atomic_o

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-08 Thread Peter Zijlstra
So I think you can make the entire thing work with rcu_note_context_switch(). If we have the sync thing do something like: for_each_task(t) { atomic_inc(&rcu_tasks); atomic_or(&t->rcu_attention, RCU_TASK); smp_mb__after_atomic();

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-07 Thread Paul E. McKenney
On Thu, Aug 07, 2014 at 06:32:28PM +0200, Peter Zijlstra wrote: > On Thu, Aug 07, 2014 at 08:43:58AM -0700, Paul E. McKenney wrote: > > On Thu, Aug 07, 2014 at 10:49:21AM +0200, Peter Zijlstra wrote: > > > On Tue, Aug 05, 2014 at 02:55:10PM -0700, Paul E. McKenney wrote: > > > > +/* Check for nohz_

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-07 Thread Peter Zijlstra
On Thu, Aug 07, 2014 at 08:43:58AM -0700, Paul E. McKenney wrote: > On Thu, Aug 07, 2014 at 10:49:21AM +0200, Peter Zijlstra wrote: > > On Tue, Aug 05, 2014 at 02:55:10PM -0700, Paul E. McKenney wrote: > > > +/* Check for nohz_full CPUs executing in userspace. */ > > > +static void check_no_hz_full

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-07 Thread Paul E. McKenney
On Thu, Aug 07, 2014 at 10:49:21AM +0200, Peter Zijlstra wrote: > On Tue, Aug 05, 2014 at 02:55:10PM -0700, Paul E. McKenney wrote: > > +/* Check for nohz_full CPUs executing in userspace. */ > > +static void check_no_hz_full_tasks(void) > > +{ > > +#ifdef CONFIG_NO_HZ_FULL > > + int cpu; > > +

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-07 Thread Peter Zijlstra
On Tue, Aug 05, 2014 at 02:55:10PM -0700, Paul E. McKenney wrote: > +/* Check for nohz_full CPUs executing in userspace. */ > +static void check_no_hz_full_tasks(void) > +{ > +#ifdef CONFIG_NO_HZ_FULL > + int cpu; > + struct task_struct *t; > + > + for_each_online_cpu(cpu) { > +

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-06 Thread Paul E. McKenney
On Tue, Aug 05, 2014 at 05:51:01PM -0700, Paul E. McKenney wrote: > On Wed, Aug 06, 2014 at 08:33:29AM +0800, Lai Jiangshan wrote: > > On 08/06/2014 05:55 AM, Paul E. McKenney wrote: > > > On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: > > >> On 08/04/2014 10:56 PM, Peter Zijlstra w

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-05 Thread Paul E. McKenney
On Wed, Aug 06, 2014 at 08:33:29AM +0800, Lai Jiangshan wrote: > On 08/06/2014 05:55 AM, Paul E. McKenney wrote: > > On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: > >> On 08/04/2014 10:56 PM, Peter Zijlstra wrote: > >>> On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-05 Thread Paul E. McKenney
On Wed, Aug 06, 2014 at 08:27:51AM +0800, Lai Jiangshan wrote: > On 08/06/2014 05:55 AM, Paul E. McKenney wrote: > > On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: > >> On 08/04/2014 10:56 PM, Peter Zijlstra wrote: > >>> On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-05 Thread Lai Jiangshan
On 08/06/2014 05:55 AM, Paul E. McKenney wrote: > On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: >> On 08/04/2014 10:56 PM, Peter Zijlstra wrote: >>> On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-05 Thread Lai Jiangshan
On 08/06/2014 05:55 AM, Paul E. McKenney wrote: > On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: >> On 08/04/2014 10:56 PM, Peter Zijlstra wrote: >>> On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-05 Thread Paul E. McKenney
On Tue, Aug 05, 2014 at 08:47:55AM +0800, Lai Jiangshan wrote: > On 08/04/2014 10:56 PM, Peter Zijlstra wrote: > > On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: > >> On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote: > >>> OK, I will bite... > >>> > >>> What kinds o

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Lai Jiangshan
On 08/04/2014 10:56 PM, Peter Zijlstra wrote: > On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: >> On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote: >>> OK, I will bite... >>> >>> What kinds of tasks are on a runqueue, but neither ->on_cpu nor >>> PREEMPT_ACTIVE? >>

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Oleg Nesterov
On 08/04, Paul E. McKenney wrote: > > OK, so I checked out my earlier concern about the group leader going away. > It looks like the group leader now sticks around until all threads in > the group have exited, which is a nice change from the behavior I was > (perhaps incorrectly) recalling! Ah, I

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 03:32:21PM +0200, Oleg Nesterov wrote: > On 08/03, Paul E. McKenney wrote: > > > > On Sun, Aug 03, 2014 at 03:33:18PM +0200, Oleg Nesterov wrote: > > > It seems that you need another global list, a task should be visible on > > > that > > > list until exit_rcu(). > > > > As

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Oleg Nesterov
On 08/03, Paul E. McKenney wrote: > > On Sun, Aug 03, 2014 at 03:33:18PM +0200, Oleg Nesterov wrote: > > It seems that you need another global list, a task should be visible on that > > list until exit_rcu(). > > As in create another global list that all tasks are added to when created > and then r

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Peter Zijlstra
On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: > On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote: > > OK, I will bite... > > > > What kinds of tasks are on a runqueue, but neither ->on_cpu nor > > PREEMPT_ACTIVE? > > Userspace tasks, they don't necessarily get PR

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 06:51:04AM -0700, Paul E. McKenney wrote: > On Mon, Aug 04, 2014 at 03:25:25PM +0200, Oleg Nesterov wrote: > > On 08/03, Paul E. McKenney wrote: > > > > > > On Mon, Aug 04, 2014 at 08:37:37AM +0800, Lai Jiangshan wrote: > > > > An alternative solution: > > > > srcu_read_lock

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 03:25:25PM +0200, Oleg Nesterov wrote: > On 08/03, Paul E. McKenney wrote: > > > > On Mon, Aug 04, 2014 at 08:37:37AM +0800, Lai Jiangshan wrote: > > > An alternative solution: > > > srcu_read_lock() before exit_notify(), srcu_read_unlock() after the last > > > preempt_disa

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 03:29:27PM +0200, Oleg Nesterov wrote: > On 08/03, Paul E. McKenney wrote: > > > > If I understand correctly, your goal is to remove a synchronize_sched() > > worth of latency from the overall RCU-tasks callback latency. Or am I > > still confused? > > Yes, exactly. But ag

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Oleg Nesterov
On 08/03, Paul E. McKenney wrote: > > If I understand correctly, your goal is to remove a synchronize_sched() > worth of latency from the overall RCU-tasks callback latency. Or am I > still confused? Yes, exactly. But again, I am not sure this minor optimization makes sense, mostly I tried to che

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Oleg Nesterov
On 08/03, Paul E. McKenney wrote: > > On Mon, Aug 04, 2014 at 08:37:37AM +0800, Lai Jiangshan wrote: > > An alternative solution: > > srcu_read_lock() before exit_notify(), srcu_read_unlock() after the last > > preempt_disable() > > in the do_exit, and synchronize_srcu() in rcu_tasks_kthread(). >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 02:25:15PM +0200, Peter Zijlstra wrote: > On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote: > > OK, I will bite... > > > > What kinds of tasks are on a runqueue, but neither ->on_cpu nor > > PREEMPT_ACTIVE? > > Userspace tasks, they don't necessarily get PR

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Peter Zijlstra
On Mon, Aug 04, 2014 at 04:50:44AM -0700, Paul E. McKenney wrote: > OK, I will bite... > > What kinds of tasks are on a runqueue, but neither ->on_cpu nor > PREEMPT_ACTIVE? Userspace tasks, they don't necessarily get PREEMPT_ACTIVE when preempted. Now obviously you're not _that_ interested in use

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 04:18:53PM +0800, Lai Jiangshan wrote: > On 08/04/2014 03:46 PM, Peter Zijlstra wrote: > > On Mon, Aug 04, 2014 at 09:28:45AM +0800, Lai Jiangshan wrote: > >> On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > >>> + rcu_read_lock(); > >>> + for_each_process_th

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Lai Jiangshan
On 08/04/2014 03:46 PM, Peter Zijlstra wrote: > On Mon, Aug 04, 2014 at 09:28:45AM +0800, Lai Jiangshan wrote: >> On 08/01/2014 05:55 AM, Paul E. McKenney wrote: >>> + rcu_read_lock(); >>> + for_each_process_thread(g, t) { >>> + if (t != current && ACCESS_ONCE(

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-04 Thread Peter Zijlstra
On Mon, Aug 04, 2014 at 09:28:45AM +0800, Lai Jiangshan wrote: > On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > > + rcu_read_lock(); > > + for_each_process_thread(g, t) { > > + if (t != current && ACCESS_ONCE(t->on_rq) && > > + !is_idle

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Lai Jiangshan
On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > + rcu_read_lock(); > + for_each_process_thread(g, t) { > + if (t != current && ACCESS_ONCE(t->on_rq) && > + !is_idle_task(t)) { > + get_task_struct(t); >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Paul E. McKenney
On Mon, Aug 04, 2014 at 08:37:37AM +0800, Lai Jiangshan wrote: > On 08/04/2014 06:05 AM, Paul E. McKenney wrote: > > On Sun, Aug 03, 2014 at 03:33:18PM +0200, Oleg Nesterov wrote: > >> On 08/02, Paul E. McKenney wrote: > >>> > >>> On Sat, Aug 02, 2014 at 04:56:16PM +0200, Oleg Nesterov wrote: > >>>

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Lai Jiangshan
On 08/04/2014 06:05 AM, Paul E. McKenney wrote: > On Sun, Aug 03, 2014 at 03:33:18PM +0200, Oleg Nesterov wrote: >> On 08/02, Paul E. McKenney wrote: >>> >>> On Sat, Aug 02, 2014 at 04:56:16PM +0200, Oleg Nesterov wrote: On 07/31, Paul E. McKenney wrote: > > + rcu_read_lock();

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Paul E. McKenney
On Sun, Aug 03, 2014 at 03:33:18PM +0200, Oleg Nesterov wrote: > On 08/02, Paul E. McKenney wrote: > > > > On Sat, Aug 02, 2014 at 04:56:16PM +0200, Oleg Nesterov wrote: > > > On 07/31, Paul E. McKenney wrote: > > > > > > > > + rcu_read_lock(); > > > > + for_each_process

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Paul E. McKenney
On Sun, Aug 03, 2014 at 02:57:58PM +0200, Oleg Nesterov wrote: > On 08/02, Paul E. McKenney wrote: > > > > On Fri, Aug 01, 2014 at 08:40:59PM +0200, Oleg Nesterov wrote: > > > On 08/01, Paul E. McKenney wrote: > > > > > > > > On Fri, Aug 01, 2014 at 04:11:44PM +0200, Oleg Nesterov wrote: > > > > >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Oleg Nesterov
On 08/02, Paul E. McKenney wrote: > > On Sat, Aug 02, 2014 at 04:56:16PM +0200, Oleg Nesterov wrote: > > On 07/31, Paul E. McKenney wrote: > > > > > > + rcu_read_lock(); > > > + for_each_process_thread(g, t) { > > > + if (t != current && ACCESS_ONCE(t->on_rq) && > >

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-03 Thread Oleg Nesterov
On 08/02, Paul E. McKenney wrote: > > On Fri, Aug 01, 2014 at 08:40:59PM +0200, Oleg Nesterov wrote: > > On 08/01, Paul E. McKenney wrote: > > > > > > On Fri, Aug 01, 2014 at 04:11:44PM +0200, Oleg Nesterov wrote: > > > > Not sure this makes any sense, but perhaps we can check for the new > > > > c

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-02 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 08:40:59PM +0200, Oleg Nesterov wrote: > On 08/01, Paul E. McKenney wrote: > > > > On Fri, Aug 01, 2014 at 04:11:44PM +0200, Oleg Nesterov wrote: > > > Not sure this makes any sense, but perhaps we can check for the new > > > callbacks and start the next gp. IOW, the main lo

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-02 Thread Paul E. McKenney
On Sat, Aug 02, 2014 at 04:56:16PM +0200, Oleg Nesterov wrote: > On 07/31, Paul E. McKenney wrote: > > > > + rcu_read_lock(); > > + for_each_process_thread(g, t) { > > + if (t != current && ACCESS_ONCE(t->on_rq) && > > + !is_idle_task(t))

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-02 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 08:57:53PM +0200, Oleg Nesterov wrote: > On 07/31, Paul E. McKenney wrote: > > > > + rcu_read_lock(); > > + for_each_process_thread(g, t) { > > + if (t != current && ACCESS_ONCE(t->on_rq) && > > + !is_idle_task(t))

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-02 Thread Oleg Nesterov
On 07/31, Paul E. McKenney wrote: > > + rcu_read_lock(); > + for_each_process_thread(g, t) { > + if (t != current && ACCESS_ONCE(t->on_rq) && > + !is_idle_task(t)) { I didn't notice this check before, but it is not needed. for_eac

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-01 Thread Oleg Nesterov
On 07/31, Paul E. McKenney wrote: > > + rcu_read_lock(); > + for_each_process_thread(g, t) { > + if (t != current && ACCESS_ONCE(t->on_rq) && > + !is_idle_task(t)) { > + get_task_struct(t); > +

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-01 Thread Oleg Nesterov
On 08/01, Paul E. McKenney wrote: > > On Fri, Aug 01, 2014 at 04:11:44PM +0200, Oleg Nesterov wrote: > > Not sure this makes any sense, but perhaps we can check for the new > > callbacks and start the next gp. IOW, the main loop roughly does > > > > for (;;) { > > list = rcu_tasks_c

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-01 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 04:11:44PM +0200, Oleg Nesterov wrote: > On 07/31, Paul E. McKenney wrote: > > > > +/* Lists of tasks that we are still waiting for during this grace period. > > */ > > +static LIST_HEAD(rcu_tasks_holdouts); Good point, fixed! > This can be local var in rcu_tasks_kthread(

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-01 Thread Frederic Weisbecker
On Thu, Jul 31, 2014 at 07:04:16PM -0700, Paul E. McKenney wrote: > On Fri, Aug 01, 2014 at 01:57:50AM +0200, Frederic Weisbecker wrote: > > > > So this thread is going to poll every second? I guess something prevents it > > to run when system is idle somewhere? But I'm not familiar with the whole

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-08-01 Thread Oleg Nesterov
On 07/31, Paul E. McKenney wrote: > > +/* Lists of tasks that we are still waiting for during this grace period. */ > +static LIST_HEAD(rcu_tasks_holdouts); This can be local var in rcu_tasks_kthread() > + while (!list_empty(&rcu_tasks_holdouts)) { > + schedule_tim

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 09:31:37AM +0800, Lai Jiangshan wrote: > On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > > From: "Paul E. McKenney" > > > > This commit adds a new RCU-tasks flavor of RCU, which provides > > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > > context

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 01:57:50AM +0200, Frederic Weisbecker wrote: > On Thu, Jul 31, 2014 at 02:55:01PM -0700, Paul E. McKenney wrote: > > From: "Paul E. McKenney" > > > > This commit adds a new RCU-tasks flavor of RCU, which provides > > call_rcu_tasks(). This RCU flavor's quiescent states ar

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Paul E. McKenney
On Fri, Aug 01, 2014 at 09:15:34AM +0800, Lai Jiangshan wrote: > On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > > From: "Paul E. McKenney" > > > > This commit adds a new RCU-tasks flavor of RCU, which provides > > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > > context

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Lai Jiangshan
On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > From: "Paul E. McKenney" > > This commit adds a new RCU-tasks flavor of RCU, which provides > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > context switch (not preemption!), userspace execution, and the idle loop. > Note th

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Lai Jiangshan
On 08/01/2014 05:55 AM, Paul E. McKenney wrote: > From: "Paul E. McKenney" > > This commit adds a new RCU-tasks flavor of RCU, which provides > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > context switch (not preemption!), userspace execution, and the idle loop. > Note th

Re: [PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Frederic Weisbecker
On Thu, Jul 31, 2014 at 02:55:01PM -0700, Paul E. McKenney wrote: > From: "Paul E. McKenney" > > This commit adds a new RCU-tasks flavor of RCU, which provides > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > context switch (not preemption!), userspace execution, and the id

[PATCH v3 tip/core/rcu 1/9] rcu: Add call_rcu_tasks()

2014-07-31 Thread Paul E. McKenney
From: "Paul E. McKenney" This commit adds a new RCU-tasks flavor of RCU, which provides call_rcu_tasks(). This RCU flavor's quiescent states are voluntary context switch (not preemption!), userspace execution, and the idle loop. Note that unlike other RCU flavors, these quiescent states occur in