All of lore.kernel.org
 help / color / mirror / Atom feed
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>,
	Jiang Liu <jiang.liu@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: [PATCH v3 [resend] 02/18] Revert "smp: Fix SMP function call empty cpu mask race"
Date: Mon, 16 Dec 2013 00:36:24 +0800	[thread overview]
Message-ID: <1387125400-28849-3-git-send-email-liuj97@gmail.com> (raw)
In-Reply-To: <1387125400-28849-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

  parent reply	other threads:[~2013-12-15 16:40 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-15 16:36 [PATCH v3 [resend] 00/18] simplify generic cross CPU function call implementation Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 01/18] Revert "kernel/smp.c: free related resources when failure occurs in hotplug_cfd()" Jiang Liu
2013-12-15 16:36 ` Jiang Liu [this message]
2013-12-15 16:36 ` [PATCH v3 [resend] 03/18] smp, alpha: kill SMP single function call interrupt Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 04/18] smp, ARM: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 05/18] smp, ARM64: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-17 17:16   ` Will Deacon
2013-12-17 17:16     ` Will Deacon
2013-12-15 16:36 ` [PATCH v3 [resend] 06/18] smp, blackfin: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 07/18] smp, IA64: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 08/18] smp, m32r: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 09/18] smp, mn10300: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 10/18] smp, mn10300: enable arch_send_call_function_ipi_mask() Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 11/18] smp, sh: kill SMP single function call interrupt Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 12/18] smp, sparc64: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 13/18] smp, sparc: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 14/18] smp, x86, xen: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-16  3:00   ` Konrad Rzeszutek Wilk
2013-12-16  3:00     ` Konrad Rzeszutek Wilk
2013-12-16  4:24     ` Liu, Jinsong
2013-12-16  4:24     ` Liu, Jinsong
2013-12-16  4:24       ` Liu, Jinsong
2013-12-16 16:33       ` Konrad Rzeszutek Wilk
2013-12-16 16:33         ` Konrad Rzeszutek Wilk
2013-12-15 16:36 ` [PATCH v3 [resend] 15/18] smp, x86: " Jiang Liu
2013-12-15 16:36   ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 16/18] smp: cleanup unsued generic_smp_call_function_single_interrupt() Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 17/18] smp: rename call_single_queue as call_function_queue Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 18/18] SMP, trivial: remove unused code from smp_boot.h Jiang Liu

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=1387125400-28849-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=jiang.liu@huawei.com \
    --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 \
    /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.