lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 5 May 2015 11:45:04 -0700
From:	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
To:	Sasha Levin <sasha.levin@...cle.com>
Cc:	linux-kernel@...r.kernel.org, mingo@...nel.org,
	laijs@...fujitsu.com, dipankar@...ibm.com,
	akpm@...ux-foundation.org, mathieu.desnoyers@...icios.com,
	josh@...htriplett.org, tglx@...utronix.de, peterz@...radead.org,
	rostedt@...dmis.org, dhowells@...hat.com, edumazet@...gle.com,
	dvhart@...ux.intel.com, fweisbec@...il.com, oleg@...hat.com,
	bobby.prani@...il.com
Subject: Re: [PATCH tip/core/rcu 2/2] rcu: Tighten up affinity and check for
 sysidle

On Tue, May 05, 2015 at 12:27:21AM -0700, Paul E. McKenney wrote:
> On Mon, May 04, 2015 at 06:10:31PM -0400, Sasha Levin wrote:
> > On 03/03/2015 12:50 PM, Paul E. McKenney wrote:
> > > From: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
> > > 
> > > If the RCU grace-period kthread invoking rcu_sysidle_check_cpu()
> > > happens to be running on the tick_do_timer_cpu initially,
> > > then rcu_bind_gp_kthread() won't bind it.  This kthread might
> > > then migrate before invoking rcu_gp_fqs(), which will trigger the
> > > WARN_ON_ONCE() in rcu_sysidle_check_cpu().  This commit therefore makes
> > > rcu_bind_gp_kthread() do the binding even if the kthread is currently
> > > on the same CPU.  Because this incurs added overhead, this commit also
> > > causes each RCU grace-period kthread to invoke rcu_bind_gp_kthread()
> > > once at boot rather than at the beginning of each grace period.
> > > And as long as rcu_bind_gp_kthread() is being modified, this commit
> > > eliminates its #ifdef.
> > > 
> > > Signed-off-by: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
> > > ---
> > >  kernel/rcu/tree.c        |  2 +-
> > >  kernel/rcu/tree_plugin.h | 12 ++++++------
> > >  2 files changed, 7 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > > index 735bd7ee749a..a6972c20eaa5 100644
> > > --- a/kernel/rcu/tree.c
> > > +++ b/kernel/rcu/tree.c
> > > @@ -1707,7 +1707,6 @@ static int rcu_gp_init(struct rcu_state *rsp)
> > >  	struct rcu_node *rnp = rcu_get_root(rsp);
> > >  
> > >  	ACCESS_ONCE(rsp->gp_activity) = jiffies;
> > > -	rcu_bind_gp_kthread();
> > >  	raw_spin_lock_irq(&rnp->lock);
> > >  	smp_mb__after_unlock_lock();
> > >  	if (!ACCESS_ONCE(rsp->gp_flags)) {
> > > @@ -1895,6 +1894,7 @@ static int __noreturn rcu_gp_kthread(void *arg)
> > >  	struct rcu_state *rsp = arg;
> > >  	struct rcu_node *rnp = rcu_get_root(rsp);
> > >  
> > > +	rcu_bind_gp_kthread();
> > >  	for (;;) {
> > >  
> > >  		/* Handle grace-period start. */
> > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > > index 0a571e9a0f1d..b46c92824db1 100644
> > > --- a/kernel/rcu/tree_plugin.h
> > > +++ b/kernel/rcu/tree_plugin.h
> > > @@ -2763,7 +2763,8 @@ static void rcu_sysidle_exit(int irq)
> > >  
> > >  /*
> > >   * Check to see if the current CPU is idle.  Note that usermode execution
> > > - * does not count as idle.  The caller must have disabled interrupts.
> > > + * does not count as idle.  The caller must have disabled interrupts,
> > > + * and must be running on tick_do_timer_cpu.
> > >   */
> > >  static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
> > >  				  unsigned long *maxj)
> > > @@ -2784,8 +2785,8 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
> > >  	if (!*isidle || rdp->rsp != rcu_state_p ||
> > >  	    cpu_is_offline(rdp->cpu) || rdp->cpu == tick_do_timer_cpu)
> > >  		return;
> > > -	if (rcu_gp_in_progress(rdp->rsp))
> > > -		WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
> > > +	/* Verify affinity of current kthread. */
> > > +	WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
> > 
> > Hey Paul,
> > 
> > I seem to be hitting this warning:
> > 
> > [22408.472078] ------------[ cut here ]------------
> > [22408.476972] WARNING: CPU: 1 PID: 8 at kernel/rcu/tree_plugin.h:2796 rcu_sysidle_check_cpu+0x374/0x3f0()
> > [22408.481567] Modules linked in:
> > [22408.486054] CPU: 1 PID: 8 Comm: rcu_sched Tainted: G        W       4.1.0-rc1-next-20150504+ #3
> > [22408.490576] Hardware name: Oracle Corporation OVCA X3-2             /ASSY,MOTHERBOARD,1U   , BIOS 17021300 06/19/2012
> > [22408.495117]  ffff881ff2db4600 0000000044d8814b ffff881ff2f1fab8 ffffffff830f9926
> > [22408.499647]  0000000000000000 0000000000000000 ffff881ff2f1fb08 ffffffff8120bed0
> > [22408.504120]  ffff881ff2f1fb88 ffffffff81324ec4 1ffff103fe5e3f65 ffff881ff2f1fd48
> > [22408.508568] Call Trace:
> > [22408.512953] dump_stack (lib/dump_stack.c:52)
> > [22408.517331] warn_slowpath_common (kernel/panic.c:447)
> > [22408.521637] ? rcu_sysidle_check_cpu (kernel/rcu/tree_plugin.h:2796 (discriminator 53))
> > [22408.525899] warn_slowpath_null (kernel/panic.c:481)
> > [22408.530105] rcu_sysidle_check_cpu (kernel/rcu/tree_plugin.h:2796 (discriminator 53))
> > [22408.534287] ? console_conditional_schedule (kernel/time/timer.c:1472)
> > [22408.538413] dyntick_save_progress_counter (kernel/rcu/tree.c:1041)
> > [22408.542486] force_qs_rnp (kernel/rcu/tree.c:2793)
> > [22408.546504] ? wake_up_atomic_t (kernel/sched/wait.c:200)
> > [22408.550461] ? rcu_sysidle_check_cpu (kernel/rcu/tree.c:1039)
> > [22408.554374] rcu_gp_kthread (kernel/rcu/tree.c:1914 include/linux/jump_label.h:125 include/linux/context_tracking_state.h:28 include/linux/tick.h:123 kernel/rcu/tree_plugin.h:2914 kernel/rcu/tree.c:1916 kernel/rcu/tree.c:2075)
> > [22408.558240] ? rcu_oom_notify (kernel/rcu/tree.c:2012)
> > [22408.562044] ? finish_task_switch (include/linux/tick.h:179 kernel/sched/core.c:2248)
> > [22408.565789] ? __schedule (kernel/sched/core.c:2340 kernel/sched/core.c:2798)
> > [22408.569473] ? __wake_up_common (kernel/sched/wait.c:73)
> > [22408.573088] ? prepare_to_wait_event (kernel/sched/wait.c:292)
> > [22408.576665] ? rcu_oom_notify (kernel/rcu/tree.c:2012)
> > [22408.580197] kthread (kernel/kthread.c:207)
> > [22408.583652] ? arch_vtime_task_switch (kernel/sched/cputime.c:753)
> > [22408.587065] ? kthread_create_on_node (kernel/kthread.c:176)
> > [22408.590427] ? kthread_create_on_node (kernel/kthread.c:176)
> > [22408.593713] ret_from_fork (arch/x86/kernel/entry_64.S:640)
> > [22408.596972] ? kthread_create_on_node (kernel/kthread.c:176)
> 
> That is certainly not what I wanted to happen!  ;-)
> 
> Looking into it.

Could you please send along your .CONFIG?

							Thanx, Paul

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists