Thread (38 messages) 38 messages, 6 authors, 2016-03-02

Re: [patch 20/20] rcu: Make CPU_DYING_IDLE an explicit call

From: Thomas Gleixner <hidden>
Date: 2016-02-27 11:32:13
Also in: lkml

On Sat, 27 Feb 2016, Paul E. McKenney wrote:
On Sat, Feb 27, 2016 at 08:47:41AM +0100, Thomas Gleixner wrote:
quoted
On Fri, 26 Feb 2016, Paul E. McKenney wrote:
quoted
quoted
quoted
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -762,6 +762,7 @@ void cpuhp_report_idle_dead(void)
 	BUG_ON(st->state != CPUHP_AP_OFFLINE);
 	st->state = CPUHP_AP_IDLE_DEAD;
 	complete(&st->done);
What prevents the other CPU from killing this CPU at this point, so
that this CPU does not tell RCU that it is dead?

I agree that the odds should be low, but there are all manner of things
that might delay a CPU for just a little bit too long...

Or am I missing something subtle here?
No. The reason why I moved the rcu call past the complete is, that otherwise
complete() complains about rcu being dead already. Hmm, but you are right. In
theory the other side could allow physical removal before it actually told rcu
that it's gone.
There is one case where this is OK, and that is where the outgoing CPU
puts itself to sleep (or whatever) without help from the other CPU.
That's the case. It's the last call before the outgoing CPU goes into
arch_cpu_idle_dead(). There is no involvement of the controlling CPU at this
point. It just wants to know, that the outgoing one is dead finally.

Thanks,

	tglx
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help