All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josht@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
	dvhltc@us.ibm.com, niv@us.ibm.com, tglx@linutronix.de,
	peterz@infradead.org, rostedt@goodmis.org,
	hugh.dickins@tiscali.co.uk, benh@kernel.crashing.org
Subject: Re: [PATCH -tip/core/rcu 2/6] Introduce cpu_notifier() to handle !HOTPLUG_CPU case
Date: Mon, 17 Aug 2009 11:28:57 -0700	[thread overview]
Message-ID: <20090817182857.GG6760@linux.vnet.ibm.com> (raw)
In-Reply-To: <1250529719.2709.11.camel@josh-work.beaverton.ibm.com>

On Mon, Aug 17, 2009 at 10:21:59AM -0700, Josh Triplett wrote:
> On Sat, 2009-08-15 at 09:53 -0700, Paul E. McKenney wrote:
> > From: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > 
> > This patch introduces a new cpu_notifier() API that is similar to
> > hotcpu_notifier(), but which also notifies of CPUs coming online during
> > boot in the !HOTPLUG_CPU case.
> [...]
> > --- a/include/linux/cpu.h
> > +++ b/include/linux/cpu.h
> > @@ -48,6 +48,15 @@ struct notifier_block;
> > 
> >  #ifdef CONFIG_SMP
> >  /* Need to know about CPUs going up/down? */
> > +#if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE)
> > +#define cpu_notifier(fn, pri) {					\
> > +	static struct notifier_block fn##_nb __cpuinitdata =	\
> > +		{ .notifier_call = fn, .priority = pri };	\
> > +	register_cpu_notifier(&fn##_nb);			\
> > +}
> > +#else /* #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */
> > +#define cpu_notifier(fn, pri)	do { (void)(fn); } while (0)
> > +#endif /* #else #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */
> 
> These two definitions seem inconsistent.  I think the first one needs to
> change to use do { ... } while(0) as well, so it eats the subsequent
> semicolon.

Ha!  I just copied the old hotcpu_notifier style.  Will send a patch
fixing both.  Or feel free to send one, if you wish.

> Does this really want to live under defined(CONFIG_HOTPLUG_CPU)?  What
> happens when onlining CPUs during the !define(CONFIG_HOTPLUG_CPU) case?
> This seems somewhat inconsistent with the explanation in your commit
> message; can you clarify?

The !MODULE covers the !define(CONFIG_HOTPLUG_CPU) case, please see
below.

> Also, why !defined(MODULE)?

Here is how the cases lay out:

o	!CONFIG_SMP:  there is only one CPU, and so there can be no
	CPU-hotplug operations, even at boot.  Therefore, the
	cpu_notifier() need do nothing.

o	CONFIG_SMP && CPU_HOTPLUG_CPU:  CPUs can come and go at any
	time, so we need cpu_notifier() to actually register a
	notifier.

o	CONFIG_SMP && !CPU_HOTPLUG_CPU && MODULE:  CPUs cannot go
	offline, but they do come online at boot time.	But MODULE means
	that this code is in a module, and modules cannot be loaded
	until later, after all CPUs have come online.  So cpu_notifier()
	need do nothing in this case.

o	CONFIG_SMP && !CPU_HOTPLUG_CPU && !MODULE:  CPUs cannot go
	offline, but they do come online at boot time.  This code
	is not in a module, so might be running at boot time, and
	thus might need to deal with CPUs coming online.  Therefore,
	cpu_notifier() must actually register a notifier.

The difference between hotcpu_notifier() and cpu_notifier() is in this
last case.  You would use hotcpu_notifier() for non-module code that did
not run until all CPUs had come online, and thus would not need to deal
with CPU hotplug unless HOTPLUG_CPU was actually defined.

							Thanx, Paul

  reply	other threads:[~2009-08-17 18:29 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-15 16:51 [PATCH -tip/core/rcu 1/6] Cleanups and fixes for RCU in face of heavy CPU-hotplug stress Paul E. McKenney
2009-08-15 16:53 ` [PATCH -tip/core/rcu 1/6] Split hierarchical RCU initialization into boot-time and CPU-online pieces Paul E. McKenney
2009-08-15 17:07   ` [tip:core/rcu] rcu: " tip-bot for Paul E. McKenney
2009-08-15 16:53 ` [PATCH -tip/core/rcu 2/6] Introduce cpu_notifier() to handle !HOTPLUG_CPU case Paul E. McKenney
2009-08-15 17:07   ` [tip:core/rcu] cpu hotplug: " tip-bot for Paul E. McKenney
2009-08-17 17:21   ` [PATCH -tip/core/rcu 2/6] " Josh Triplett
2009-08-17 18:28     ` Paul E. McKenney [this message]
2009-08-15 16:53 ` [PATCH -tip/core/rcu 3/6] Simplify RCU CPU-hotplug notification Paul E. McKenney
2009-08-15 17:07   ` [tip:core/rcu] rcu: " tip-bot for Paul E. McKenney
2009-08-20  4:02   ` [PATCH -tip/core/rcu 3/6] " Lai Jiangshan
2009-08-20  4:21     ` Paul E. McKenney
2009-08-15 16:53 ` [PATCH -tip/core/rcu 4/6] Make preemptable RCU scan all CPUs when summing RCU counters Paul E. McKenney
2009-08-15 17:07   ` [tip:core/rcu] rcu: " tip-bot for Paul E. McKenney
2009-08-15 16:53 ` [PATCH -tip/core/rcu 5/6] Make rcupreempt_trace.c look at offline CPUs Paul E. McKenney
2009-08-15 17:07   ` [tip:core/rcu] rcu: " tip-bot for Paul E. McKenney
2009-08-15 16:53 ` [PATCH -tip/core/rcu 6/6] Fix typo in rcu_irq_exit() comment header Paul E. McKenney
2009-08-15 17:00   ` Ingo Molnar
2009-08-15 17:10     ` Paul E. McKenney
2009-08-15 17:11       ` Ingo Molnar
2009-08-15 17:08   ` [tip:core/rcu] rcu: " tip-bot for Josh Triplett
2009-08-17 18:24 ` [PATCH -tip/core/rcu 1/6] Cleanups and fixes for RCU in face of heavy CPU-hotplug stress Josh Triplett
2009-08-17 19:20   ` Paul E. McKenney
2009-08-18 15:26     ` Ingo Molnar
2009-08-18 20:07       ` Paul E. McKenney
2009-08-19  6:06         ` Paul E. McKenney
2009-08-19 11:59           ` Ingo Molnar
2009-08-19 12:09           ` [tip:core/rcu] rcu: Delay rcu_barrier() wait until beginning of next CPU-hotunplug operation tip-bot for Paul E. McKenney
2009-08-19 15:24           ` [PATCH -tip/core/rcu 1/6] Cleanups and fixes for RCU in face of heavy CPU-hotplug stress Mathieu Desnoyers
2009-08-19 16:38             ` Paul E. McKenney
2009-08-19 18:10               ` Mathieu Desnoyers
2009-08-19 18:31                 ` Paul E. McKenney
2009-08-20 14:03       ` Mathieu Desnoyers
2009-08-21 14:17         ` Ingo Molnar
2009-08-21 14:29           ` Steven Rostedt
2009-08-21 14:44             ` Ingo Molnar
2009-08-21 15:00               ` Mathieu Desnoyers
2009-08-21 15:37               ` Paul E. McKenney
2009-08-21 14:58           ` Mathieu Desnoyers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090817182857.GG6760@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=dipankar@in.ibm.com \
    --cc=dvhltc@us.ibm.com \
    --cc=hugh.dickins@tiscali.co.uk \
    --cc=josht@linux.vnet.ibm.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.