linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: tglx@linutronix.de, peterz@infradead.org, tj@kernel.org,
	oleg@redhat.com, paulmck@linux.vnet.ibm.com,
	rusty@rustcorp.com.au, mingo@kernel.org,
	akpm@linux-foundation.org, namhyung@kernel.org,
	walken@google.com, vincent.guittot@linaro.org,
	laijs@cn.fujitsu.com
Cc: linux-arch@vger.kernel.org, nikunj@linux.vnet.ibm.com,
	zhong@linux.vnet.ibm.com, linux-pm@vger.kernel.org,
	fweisbec@gmail.com, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, rostedt@goodmis.org,
	xiaoguangrong@linux.vnet.ibm.com, sbw@mit.edu,
	wangyun@linux.vnet.ibm.com, srivatsa.bhat@linux.vnet.ibm.com,
	netdev@vger.kernel.org, Rob Landley <rob@landley.net>,
	linuxppc-dev@lists.ozlabs.org
Subject: [PATCH 03/45] Documentation, CPU hotplug: Recommend usage of get/put_online_cpus_atomic()
Date: Sun, 23 Jun 2013 19:08:29 +0530	[thread overview]
Message-ID: <20130623133824.19094.76756.stgit@srivatsabhat.in.ibm.com> (raw)
In-Reply-To: <20130623133642.19094.16038.stgit@srivatsabhat.in.ibm.com>

Once stop_machine() is gone from the CPU offline path, we won't be able
to depend on disabling preemption to prevent CPUs from going offline
from under us.

So add documentation to recommend using the new get/put_online_cpus_atomic()
APIs to prevent CPUs from going offline, while invoking from atomic context.

Cc: Rob Landley <rob@landley.net>
Cc: linux-doc@vger.kernel.org
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 Documentation/cpu-hotplug.txt |   20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt
index 9f40135..7b3ca60 100644
--- a/Documentation/cpu-hotplug.txt
+++ b/Documentation/cpu-hotplug.txt
@@ -113,13 +113,18 @@ Never use anything other than cpumask_t to represent bitmap of CPUs.
 	#include <linux/cpu.h>
 	get_online_cpus() and put_online_cpus():
 
-The above calls are used to inhibit cpu hotplug operations. While the
+The above calls are used to inhibit cpu hotplug operations, when invoked from
+non-atomic contexts (because the above functions can sleep). While the
 cpu_hotplug.refcount is non zero, the cpu_online_mask will not change.
-If you merely need to avoid cpus going away, you could also use
-preempt_disable() and preempt_enable() for those sections.
-Just remember the critical section cannot call any
-function that can sleep or schedule this process away. The preempt_disable()
-will work as long as stop_machine_run() is used to take a cpu down.
+
+However, if you are executing in atomic context (ie., you can't afford to
+sleep), and you merely need to avoid cpus going offline, you can use
+get_online_cpus_atomic() and put_online_cpus_atomic() for those sections.
+Just remember the critical section cannot call any function that can sleep or
+schedule this process away. Using preempt_disable() will also work, as long
+as stop_machine() is used to take a CPU down. But we are going to get rid of
+stop_machine() in the CPU offline path soon, so it is strongly recommended
+to use the APIs mentioned above.
 
 CPU Hotplug - Frequently Asked Questions.
 
@@ -360,6 +365,9 @@ A: There are two ways.  If your code can be run in interrupt context, use
 		return err;
 	}
 
+   If my_func_on_cpu() itself cannot block, use get/put_online_cpus_atomic()
+   instead of get/put_online_cpus(), to prevent CPUs from going offline.
+
 Q: How do we determine how many CPUs are available for hotplug.
 A: There is no clear spec defined way from ACPI that can give us that
    information today. Based on some input from Natalie of Unisys,

  parent reply	other threads:[~2013-06-23 13:41 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-23 13:37 [PATCH 00/45] CPU hotplug: stop_machine()-free CPU hotplug, part 1 Srivatsa S. Bhat
2013-06-23 13:38 ` [PATCH 01/45] CPU hotplug: Provide APIs to prevent CPU offline from atomic context Srivatsa S. Bhat
2013-06-24 22:49   ` Steven Rostedt
2013-06-23 13:38 ` [PATCH 02/45] CPU hotplug: Clarify the usage of different synchronization APIs Srivatsa S. Bhat
2013-06-23 13:38 ` Srivatsa S. Bhat [this message]
2013-06-23 13:38 ` [PATCH 04/45] CPU hotplug: Add infrastructure to check lacking hotplug synchronization Srivatsa S. Bhat
2013-06-24 23:26   ` Steven Rostedt
2013-06-25 18:49     ` Srivatsa S. Bhat
2013-06-23 13:39 ` [PATCH 05/45] CPU hotplug: Protect set_cpu_online() to avoid false-positives Srivatsa S. Bhat
2013-06-23 13:39 ` [PATCH 06/45] CPU hotplug: Sprinkle debugging checks to catch locking bugs Srivatsa S. Bhat
2013-06-23 13:39 ` [PATCH 07/45] CPU hotplug: Expose the new debug config option Srivatsa S. Bhat
2013-06-23 15:08   ` Sergei Shtylyov
2013-06-23 18:58     ` Srivatsa S. Bhat
2013-06-23 13:39 ` [PATCH 08/45] CPU hotplug: Convert preprocessor macros to static inline functions Srivatsa S. Bhat
2013-06-23 13:40 ` [PATCH 09/45] smp: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-23 13:40 ` [PATCH 10/45] sched/core: " Srivatsa S. Bhat
2013-06-23 13:40 ` [PATCH 11/45] migration: Use raw_spin_lock/unlock since interrupts are already disabled Srivatsa S. Bhat
2013-06-23 13:40 ` [PATCH 12/45] sched/fair: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-23 13:40 ` [PATCH 13/45] timer: " Srivatsa S. Bhat
2013-06-23 13:41 ` [PATCH 14/45] sched/rt: " Srivatsa S. Bhat
2013-06-23 13:41 ` [PATCH 15/45] rcu: " Srivatsa S. Bhat
2013-06-23 13:41 ` [PATCH 16/45] tick-broadcast: " Srivatsa S. Bhat
2013-06-23 13:41 ` [PATCH 17/45] time/clocksource: " Srivatsa S. Bhat
2013-06-23 13:42 ` [PATCH 18/45] softirq: " Srivatsa S. Bhat
2013-06-23 13:42 ` [PATCH 19/45] irq: " Srivatsa S. Bhat
2013-06-23 13:42 ` [PATCH 20/45] net: " Srivatsa S. Bhat
2013-06-23 13:42 ` [PATCH 21/45] block: " Srivatsa S. Bhat
2013-06-23 13:42 ` [PATCH 22/45] percpu_counter: " Srivatsa S. Bhat
2013-06-24 17:55   ` Tejun Heo
2013-06-24 18:06     ` Tejun Heo
2013-06-24 18:09       ` Srivatsa S. Bhat
2013-06-23 13:43 ` [PATCH 23/45] infiniband: ehca: " Srivatsa S. Bhat
2013-06-23 13:43 ` [PATCH 24/45] [SCSI] fcoe: " Srivatsa S. Bhat
2013-06-23 13:43 ` [PATCH 25/45] staging/octeon: " Srivatsa S. Bhat
2013-06-23 18:17   ` Greg Kroah-Hartman
2013-06-23 18:55     ` Srivatsa S. Bhat
2013-06-23 19:17       ` Joe Perches
2013-06-24 17:25         ` Srivatsa S. Bhat
2013-06-24 18:17       ` David Daney
2013-06-23 13:43 ` [PATCH 26/45] x86: " Srivatsa S. Bhat
2013-06-23 13:43 ` [PATCH 27/45] perf/x86: " Srivatsa S. Bhat
2013-06-23 13:44 ` [PATCH 28/45] KVM: " Srivatsa S. Bhat
2013-06-23 13:44 ` [PATCH 29/45] kvm/vmx: " Srivatsa S. Bhat
2013-06-23 13:44 ` [PATCH 30/45] x86/xen: " Srivatsa S. Bhat
2013-06-23 13:45 ` [PATCH 31/45] alpha/smp: " Srivatsa S. Bhat
2013-06-23 17:50   ` Matt Turner
2013-06-23 18:56     ` Srivatsa S. Bhat
2013-06-23 13:45 ` [PATCH 32/45] blackfin/smp: " Srivatsa S. Bhat
2013-06-23 13:45 ` [PATCH 33/45] cris/smp: " Srivatsa S. Bhat
2013-06-24  6:41   ` Jesper Nilsson
2013-06-23 13:45 ` [PATCH 34/45] hexagon/smp: " Srivatsa S. Bhat
2013-06-23 13:45 ` [PATCH 35/45] ia64: irq, perfmon: " Srivatsa S. Bhat
2013-06-23 13:46 ` [PATCH 36/45] ia64: smp, tlb: " Srivatsa S. Bhat
2013-06-23 13:46 ` [PATCH 37/45] m32r: " Srivatsa S. Bhat
2013-06-23 13:46 ` [PATCH 38/45] MIPS: " Srivatsa S. Bhat
2013-06-23 13:46 ` [PATCH 39/45] mn10300: " Srivatsa S. Bhat
2013-06-23 13:47 ` [PATCH 40/45] powerpc, irq: Use GFP_ATOMIC allocations in atomic context Srivatsa S. Bhat
2013-06-25  2:08   ` Michael Ellerman
2013-06-25  2:13     ` Benjamin Herrenschmidt
2013-06-25  2:58       ` Michael Ellerman
2013-06-25  3:13         ` Benjamin Herrenschmidt
2013-06-25 19:20           ` Srivatsa S. Bhat
2013-06-23 13:47 ` [PATCH 41/45] powerpc: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-23 13:47 ` [PATCH 42/45] powerpc: Use get/put_online_cpus_atomic() to avoid false-positive warning Srivatsa S. Bhat
2013-06-23 13:47 ` [PATCH 43/45] sh: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-23 13:48 ` [PATCH 44/45] sparc: " Srivatsa S. Bhat
2013-06-23 13:48 ` [PATCH 45/45] tile: " Srivatsa S. Bhat

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=20130623133824.19094.76756.stgit@srivatsabhat.in.ibm.com \
    --to=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nikunj@linux.vnet.ibm.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rob@landley.net \
    --cc=rostedt@goodmis.org \
    --cc=rusty@rustcorp.com.au \
    --cc=sbw@mit.edu \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=vincent.guittot@linaro.org \
    --cc=walken@google.com \
    --cc=wangyun@linux.vnet.ibm.com \
    --cc=xiaoguangrong@linux.vnet.ibm.com \
    --cc=zhong@linux.vnet.ibm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).