From: Jiang Liu <liuj97@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Shaohua Li <shli@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Christoph Hellwig <hch@lst.de>, Wang YanQing <udknight@gmail.com>,
Xie XiuQi <xiexiuqi@huawei.com>,
linux-kernel@vger.kernel.org
Cc: Jiang Liu <liuj97@gmail.com>, Ingo Molnar <mingo@elte.hu>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Steven Rostedt <rostedt@goodmis.org>,
Jiri Kosina <trivial@kernel.org>,
linux-arch@vger.kernel.org
Subject: [RFC PATCH v3 02/19] Revert "smp: Fix SMP function call empty cpu mask race"
Date: Thu, 5 Dec 2013 00:12:53 +0800 [thread overview]
Message-ID: <1386173591-28514-3-git-send-email-liuj97@gmail.com> (raw)
In-Reply-To: <1386173591-28514-1-git-send-email-liuj97@gmail.com>
This reverts commit f44310b98ddb7f0d06550d73ed67df5865e3eda5.
Commit f44310b98ddb7 "smp: Fix SMP function call empty cpu mask race"
introduced field call_function_data->cpumask_ipi to resolve a race
condition in smp_call_function_many().
Later commit 9a46ad6d6df3 "smp: make smp_call_function_many() use logic
similar to smp_call_function_single()" fixed the same issue in another
way when optimizing smp_call_function_many(), which then obsoletes
changes introduced by commit f44310b98ddb7. So revert it.
Acked-by: Wang YanQing <udknight@gmail.com>
Signed-off-by: Jiang Liu <liuj97@gmail.com>
---
kernel/smp.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/kernel/smp.c b/kernel/smp.c
index 442d514..25c19af 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -23,7 +23,6 @@ enum {
struct call_function_data {
struct call_single_data __percpu *csd;
cpumask_var_t cpumask;
- cpumask_var_t cpumask_ipi;
};
static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data);
@@ -47,9 +46,6 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
cpu_to_node(cpu)))
return notifier_from_errno(-ENOMEM);
- if (!zalloc_cpumask_var_node(&cfd->cpumask_ipi, GFP_KERNEL,
- cpu_to_node(cpu)))
- return notifier_from_errno(-ENOMEM);
cfd->csd = alloc_percpu(struct call_single_data);
if (!cfd->csd) {
free_cpumask_var(cfd->cpumask);
@@ -64,7 +60,6 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
case CPU_DEAD:
case CPU_DEAD_FROZEN:
free_cpumask_var(cfd->cpumask);
- free_cpumask_var(cfd->cpumask_ipi);
free_percpu(cfd->csd);
break;
#endif
@@ -245,9 +240,9 @@ int smp_call_function_single(int cpu, smp_call_func_t func, void *info,
csd = &__get_cpu_var(csd_data);
csd_lock(csd);
-
csd->func = func;
csd->info = info;
+
generic_exec_single(cpu, csd, wait);
} else {
err = -ENXIO; /* CPU not online */
@@ -399,13 +394,6 @@ void smp_call_function_many(const struct cpumask *mask,
if (unlikely(!cpumask_weight(cfd->cpumask)))
return;
- /*
- * After we put an entry into the list, cfd->cpumask may be cleared
- * again when another CPU sends another IPI for a SMP function call, so
- * cfd->cpumask will be zero.
- */
- cpumask_copy(cfd->cpumask_ipi, cfd->cpumask);
-
for_each_cpu(cpu, cfd->cpumask) {
struct call_single_data *csd = per_cpu_ptr(cfd->csd, cpu);
struct call_single_queue *dst =
@@ -422,7 +410,7 @@ void smp_call_function_many(const struct cpumask *mask,
}
/* Send a message to all CPUs in the map */
- arch_send_call_function_ipi_mask(cfd->cpumask_ipi);
+ arch_send_call_function_ipi_mask(cfd->cpumask);
if (wait) {
for_each_cpu(cpu, cfd->cpumask) {
--
1.8.1.2
next prev parent reply other threads:[~2013-12-04 16:12 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-04 16:12 [RFC PATCH v3 00/19] simplify generic cross CPU function call implementation Jiang Liu
2013-12-04 16:12 ` [RFC PATCH v3 01/19] Revert "kernel/smp.c: free related resources when failure occurs in hotplug_cfd()" Jiang Liu
2013-12-04 16:12 ` Jiang Liu [this message]
2013-12-04 16:12 ` [RFC PATCH v3 03/19] smp, alpha: kill SMP single function call interrupt Jiang Liu
2013-12-04 16:12 ` [RFC PATCH v3 04/19] smp, ARM: " Jiang Liu
2013-12-04 16:12 ` Jiang Liu
2013-12-04 16:12 ` [RFC PATCH v3 05/19] smp, ARM64: " Jiang Liu
2013-12-04 16:12 ` Jiang Liu
2013-12-04 16:12 ` [RFC PATCH v3 06/19] smp, blackfin: " Jiang Liu
2013-12-04 16:12 ` [RFC PATCH v3 07/19] smp, hexagon: " Jiang Liu
2013-12-05 1:42 ` rkuo
2013-12-04 16:12 ` [RFC PATCH v3 08/19] smp, IA64: " Jiang Liu
2013-12-04 16:12 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 09/19] smp, m32r: " Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 10/19] smp, metag: " Jiang Liu
2013-12-04 16:38 ` James Hogan
2013-12-04 16:38 ` James Hogan
2013-12-05 16:31 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 11/19] smp, mn10300: " Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 12/19] smp, mn10300: enable arch_send_call_function_ipi_mask() Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 13/19] smp, s390: prepare for killing generic_smp_call_function_single_interrupt() Jiang Liu
2013-12-06 9:43 ` Heiko Carstens
2013-12-04 16:13 ` [RFC PATCH v3 14/19] smp, sh: kill SMP single function call interrupt Jiang Liu
2013-12-04 16:13 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 15/19] smp, sparc64: " Jiang Liu
2013-12-04 16:13 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 16/19] smp, sparc: " Jiang Liu
2013-12-04 16:13 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 17/19] smp, tile: " Jiang Liu
2013-12-05 21:08 ` Chris Metcalf
2013-12-05 21:08 ` Chris Metcalf
2013-12-04 16:13 ` [RFC PATCH v3 18/19] " Jiang Liu
2013-12-04 16:13 ` Jiang Liu
2013-12-04 16:13 ` [RFC PATCH v3 19/19] smp, x86: " Jiang Liu
2013-12-04 16:13 ` Jiang Liu
2013-12-11 22:10 ` Sebastian Andrzej Siewior
2013-12-15 15:49 ` Jiang Liu
2013-12-04 16:19 ` [RFC PATCH v3 00/19] simplify generic cross CPU function call implementation Christoph Hellwig
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=1386173591-28514-3-git-send-email-liuj97@gmail.com \
--to=liuj97@gmail.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=hch@lst.de \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=shli@kernel.org \
--cc=trivial@kernel.org \
--cc=udknight@gmail.com \
--cc=xiexiuqi@huawei.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 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.