From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: Michael Wang <wangyun@linux.vnet.ibm.com>
Cc: 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, David.Laight@aculab.com,
rostedt@goodmis.org, xiaoguangrong@linux.vnet.ibm.com,
sbw@mit.edu, fweisbec@gmail.com, zhong@linux.vnet.ibm.com,
nikunj@linux.vnet.ibm.com, linux-pm@vger.kernel.org,
linux-arch@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Wang YanQing <udknight@gmail.com>, Shaohua Li <shli@fusionio.com>,
Jan Beulich <jbeulich@suse.com>,
liguang <lig.fnst@cn.fujitsu.com>
Subject: Re: [PATCH v3 10/45] smp: Use get/put_online_cpus_atomic() to prevent CPU offline
Date: Tue, 02 Jul 2013 13:55:13 +0530 [thread overview]
Message-ID: <51D28E69.9060205@linux.vnet.ibm.com> (raw)
In-Reply-To: <51D2660A.8000401@linux.vnet.ibm.com>
Hi Michael,
On 07/02/2013 11:02 AM, Michael Wang wrote:
> Hi, Srivatsa
>
> On 06/28/2013 03:54 AM, Srivatsa S. Bhat wrote:
> [snip]
>> @@ -625,8 +632,9 @@ EXPORT_SYMBOL(on_each_cpu_mask);
>> * The function might sleep if the GFP flags indicates a non
>> * atomic allocation is allowed.
>> *
>> - * Preemption is disabled to protect against CPUs going offline but not online.
>> - * CPUs going online during the call will not be seen or sent an IPI.
>> + * We use get/put_online_cpus_atomic() to protect against CPUs going
>> + * offline but not online. CPUs going online during the call will
>> + * not be seen or sent an IPI.
>
> I was a little confused about this comment, if the offline-cpu still
> have chances to become online, then there is chances that we will pick
> it from for_each_online_cpu(), isn't it? Did I miss some point?
>
Whether or not the newly onlined CPU is observed in our for_each_online_cpu()
loop, is dependent on timing. On top of that, there are 2 paths in the code:
one which uses a temporary cpumask and the other which doesn't. In the former
case, if a CPU comes online _after_ we populate the temporary cpumask, then
we won't send an IPI to that cpu, since the temporary cpumask doesn't contain
that CPU. Whereas, if we observe the newly onlined CPU in the for_each_online_cpu()
loop itself (either in the former or the latter case), then yes, we will send
the IPI to that CPU.
Regards,
Srivatsa S. Bhat
>
>> *
>> * You must not call this function with disabled interrupts or
>> * from a hardware interrupt handler or from a bottom half handler.
>> @@ -641,26 +649,26 @@ void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info),
>> might_sleep_if(gfp_flags & __GFP_WAIT);
>>
>> if (likely(zalloc_cpumask_var(&cpus, (gfp_flags|__GFP_NOWARN)))) {
>> - preempt_disable();
>> + get_online_cpus_atomic();
>> for_each_online_cpu(cpu)
>> if (cond_func(cpu, info))
>> cpumask_set_cpu(cpu, cpus);
>> on_each_cpu_mask(cpus, func, info, wait);
>> - preempt_enable();
>> + put_online_cpus_atomic();
>> free_cpumask_var(cpus);
>> } else {
>> /*
>> * No free cpumask, bother. No matter, we'll
>> * just have to IPI them one by one.
>> */
>> - preempt_disable();
>> + get_online_cpus_atomic();
>> for_each_online_cpu(cpu)
>> if (cond_func(cpu, info)) {
>> ret = smp_call_function_single(cpu, func,
>> info, wait);
>> WARN_ON_ONCE(!ret);
>> }
>> - preempt_enable();
>> + put_online_cpus_atomic();
>> }
>> }
>> EXPORT_SYMBOL(on_each_cpu_cond);
>>
>
next prev parent reply other threads:[~2013-07-02 8:25 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-27 19:52 [PATCH v3 00/45] CPU hotplug: stop_machine()-free CPU hotplug, part 1 Srivatsa S. Bhat
2013-06-27 19:52 ` [PATCH v3 01/45] CPU hotplug: Provide APIs to prevent CPU offline from atomic context Srivatsa S. Bhat
2013-06-27 19:52 ` Srivatsa S. Bhat
2013-06-27 19:52 ` [PATCH v3 02/45] CPU hotplug: Clarify the usage of different synchronization APIs Srivatsa S. Bhat
2013-06-27 19:52 ` Srivatsa S. Bhat
2013-06-27 19:52 ` [PATCH v3 03/45] Documentation, CPU hotplug: Recommend usage of get/put_online_cpus_atomic() Srivatsa S. Bhat
2013-06-27 19:52 ` Srivatsa S. Bhat
2013-06-27 19:53 ` [PATCH v3 04/45] CPU hotplug: Add infrastructure to check lacking hotplug synchronization Srivatsa S. Bhat
2013-06-27 19:53 ` Srivatsa S. Bhat
2013-06-27 19:53 ` [PATCH v3 05/45] CPU hotplug: Protect set_cpu_online() to avoid false-positives Srivatsa S. Bhat
2013-06-27 19:53 ` Srivatsa S. Bhat
2013-06-27 19:53 ` [PATCH v3 06/45] CPU hotplug: Sprinkle debugging checks to catch locking bugs Srivatsa S. Bhat
2013-06-27 19:53 ` Srivatsa S. Bhat
2013-06-27 19:53 ` [PATCH v3 07/45] CPU hotplug: Add _nocheck() variants of accessor functions Srivatsa S. Bhat
2013-06-27 19:53 ` Srivatsa S. Bhat
2013-06-27 19:53 ` [PATCH v3 08/45] CPU hotplug: Expose the new debug config option Srivatsa S. Bhat
2013-06-27 19:53 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 09/45] CPU hotplug: Convert preprocessor macros to static inline functions Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 10/45] smp: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-07-02 5:32 ` Michael Wang
2013-07-02 5:32 ` Michael Wang
2013-07-02 8:25 ` Srivatsa S. Bhat [this message]
2013-07-02 8:25 ` Srivatsa S. Bhat
2013-07-02 8:47 ` Michael Wang
2013-07-02 9:51 ` Srivatsa S. Bhat
2013-07-02 9:51 ` Srivatsa S. Bhat
2013-07-02 10:08 ` Michael Wang
2013-07-02 10:08 ` Michael Wang
2013-06-27 19:54 ` [PATCH v3 11/45] sched/core: " Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 12/45] migration: Use raw_spin_lock/unlock since interrupts are already disabled Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 13/45] sched/fair: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 14/45] timer: " Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:54 ` [PATCH v3 15/45] sched/rt: " Srivatsa S. Bhat
2013-06-27 19:54 ` Srivatsa S. Bhat
2013-06-27 19:55 ` [PATCH v3 16/45] rcu: Use cpu_is_offline_nocheck() to avoid false-positive warnings Srivatsa S. Bhat
2013-06-27 19:55 ` Srivatsa S. Bhat
2013-06-27 20:12 ` Paul E. McKenney
2013-06-27 20:12 ` Paul E. McKenney
2013-06-27 19:55 ` [PATCH v3 17/45] tick-broadcast: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 19:55 ` Srivatsa S. Bhat
2013-06-27 19:55 ` [PATCH v3 18/45] time/clocksource: " Srivatsa S. Bhat
2013-06-27 19:55 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 19/45] softirq: " Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 20/45] irq: " Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 21/45] net: " Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 22/45] block: " Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 23/45] percpu_counter: Use _nocheck version of for_each_online_cpu() Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 24/45] infiniband: ehca: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:56 ` [PATCH v3 25/45] [SCSI] fcoe: " Srivatsa S. Bhat
2013-06-27 19:56 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 26/45] staging/octeon: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 27/45] x86: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 28/45] perf/x86: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 29/45] KVM: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 30/45] x86/xen: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:57 ` [PATCH v3 31/45] alpha/smp: " Srivatsa S. Bhat
2013-06-27 19:57 ` Srivatsa S. Bhat
2013-06-27 19:58 ` [PATCH v3 32/45] blackfin/smp: " Srivatsa S. Bhat
2013-06-27 19:58 ` Srivatsa S. Bhat
2013-06-27 19:58 ` [PATCH v3 33/45] cris/smp: " Srivatsa S. Bhat
2013-06-27 19:58 ` Srivatsa S. Bhat
2013-06-27 19:58 ` [PATCH v3 34/45] hexagon/smp: " Srivatsa S. Bhat
2013-06-27 19:58 ` Srivatsa S. Bhat
2013-06-27 19:58 ` [PATCH v3 35/45] ia64: irq, perfmon: " Srivatsa S. Bhat
2013-06-27 19:58 ` Srivatsa S. Bhat
2013-06-27 19:59 ` [PATCH v3 36/45] ia64: smp, tlb: " Srivatsa S. Bhat
2013-06-27 19:59 ` Srivatsa S. Bhat
2013-06-27 19:59 ` [PATCH v3 37/45] m32r: " Srivatsa S. Bhat
2013-06-27 19:59 ` [PATCH v3 38/45] MIPS: " Srivatsa S. Bhat
2013-06-27 19:59 ` Srivatsa S. Bhat
2013-06-27 19:59 ` [PATCH v3 39/45] mn10300: " Srivatsa S. Bhat
2013-06-27 19:59 ` Srivatsa S. Bhat
2013-06-27 19:59 ` [PATCH v3 40/45] powerpc, irq: Use GFP_ATOMIC allocations in atomic context Srivatsa S. Bhat
2013-06-27 19:59 ` Srivatsa S. Bhat
2013-06-27 20:00 ` [PATCH v3 41/45] powerpc: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 20:00 ` Srivatsa S. Bhat
2013-06-27 20:00 ` [PATCH v3 42/45] powerpc: Use get/put_online_cpus_atomic() to avoid false-positive warning Srivatsa S. Bhat
2013-06-27 20:00 ` Srivatsa S. Bhat
2013-06-27 20:00 ` [PATCH v3 43/45] sh: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat
2013-06-27 20:00 ` Srivatsa S. Bhat
2013-06-27 20:00 ` [PATCH v3 44/45] sparc: " Srivatsa S. Bhat
2013-06-27 20:00 ` Srivatsa S. Bhat
2013-06-27 20:00 ` [PATCH v3 45/45] tile: " Srivatsa S. Bhat
2013-06-27 20:00 ` 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=51D28E69.9060205@linux.vnet.ibm.com \
--to=srivatsa.bhat@linux.vnet.ibm.com \
--cc=David.Laight@aculab.com \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=jbeulich@suse.com \
--cc=laijs@cn.fujitsu.com \
--cc=lig.fnst@cn.fujitsu.com \
--cc=linux-arch@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=rostedt@goodmis.org \
--cc=rusty@rustcorp.com.au \
--cc=sbw@mit.edu \
--cc=shli@fusionio.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=udknight@gmail.com \
--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).