From: tip-bot for Thomas Gleixner <tglx@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org,
g.trinabh@gmail.com, peterz@infradead.org,
benh@kernel.crashing.org, arun.r.bharadwaj@gmail.com,
tglx@linutronix.de, deepthi@linux.vnet.ibm.com
Subject: [tip:smp/hotplug] powerpc: Fix broken cpu_idle_wait() implementation
Date: Tue, 8 May 2012 05:25:17 -0700 [thread overview]
Message-ID: <tip-9cd75e13de2dcf32ecc21c7f277cff3c0ced059e@git.kernel.org> (raw)
In-Reply-To: <20120507175651.980164748@linutronix.de>
Commit-ID: 9cd75e13de2dcf32ecc21c7f277cff3c0ced059e
Gitweb: http://git.kernel.org/tip/9cd75e13de2dcf32ecc21c7f277cff3c0ced059e
Author: Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Mon, 7 May 2012 17:59:47 +0000
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 8 May 2012 12:35:05 +0200
powerpc: Fix broken cpu_idle_wait() implementation
commit 771dae818 (powerpc/cpuidle: Add cpu_idle_wait() to allow
switching of idle routines) implemented cpu_idle_wait() for powerpc.
The changelog says:
"The equivalent routine for x86 is in arch/x86/kernel/process.c
but the powerpc implementation is different.":
Unfortunately the changelog is completely useless as it does not tell
_WHY_ it is different.
Aside of being different the implementation is patently wrong.
The rescheduling IPI is async. That means that there is no guarantee,
that the other cores have executed the IPI when cpu_idle_wait()
returns. But that's the whole purpose of this function: to guarantee
that no CPU uses the old idle handler anymore.
Use the smp_functional_call() based implementation, which fulfils the
requirements.
[ This code is going to replaced by a core version to remove all the
pointless copies in arch/*, but this one should go to stable ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Deepthi Dharwar <deepthi@linux.vnet.ibm.com>
Cc: Trinabh Gupta <g.trinabh@gmail.com>
Cc: Arun R Bharadwaj <arun.r.bharadwaj@gmail.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Link: http://lkml.kernel.org/r/20120507175651.980164748@linutronix.de
Cc: stable@vger.kernel.org
---
arch/powerpc/kernel/idle.c | 14 +++++---------
1 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index 6d2209a..04d7909 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -113,6 +113,9 @@ void cpu_idle(void)
}
}
+static void do_nothing(void *unused)
+{
+}
/*
* cpu_idle_wait - Used to ensure that all the CPUs come out of the old
@@ -123,16 +126,9 @@ void cpu_idle(void)
*/
void cpu_idle_wait(void)
{
- int cpu;
smp_mb();
-
- /* kick all the CPUs so that they exit out of old idle routine */
- get_online_cpus();
- for_each_online_cpu(cpu) {
- if (cpu != smp_processor_id())
- smp_send_reschedule(cpu);
- }
- put_online_cpus();
+ /* kick all the CPUs so that they exit out of pm_idle */
+ smp_call_function(do_nothing, NULL, 1);
}
EXPORT_SYMBOL_GPL(cpu_idle_wait);
next prev parent reply other threads:[~2012-05-08 12:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-07 17:59 [patch 0/8] cpuidle: Fix and replace cpu_idle_wait copied code Thomas Gleixner
2012-05-07 17:59 ` [patch 1/8] powerpc: Fix broken cpu_idle_wait() implementation Thomas Gleixner
2012-05-08 12:25 ` tip-bot for Thomas Gleixner [this message]
2012-05-07 17:59 ` [patch 2/8] smp: Implement kick_all_cpus_sync() Thomas Gleixner
2012-05-08 12:26 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 3/8] cpuidle: Use kick_all_cpus_sync() Thomas Gleixner
2012-05-08 12:26 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 5/8] arm: Remove unused cpu_idle_wait() Thomas Gleixner
2012-05-08 12:28 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 4/8] x86: Use kick_all_cpus_sync() Thomas Gleixner
2012-05-08 12:27 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 6/8] powerpc: Remove unused cpu_idle_wait() Thomas Gleixner
2012-05-08 12:30 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 7/8] ia64: " Thomas Gleixner
2012-05-08 12:29 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 17:59 ` [patch 8/8] sh: Remove cpu_idle_wait() Thomas Gleixner
2012-05-08 12:31 ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2012-05-07 20:06 ` [patch 0/8] cpuidle: Fix and replace cpu_idle_wait copied code Peter Zijlstra
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=tip-9cd75e13de2dcf32ecc21c7f277cff3c0ced059e@git.kernel.org \
--to=tglx@linutronix.de \
--cc=arun.r.bharadwaj@gmail.com \
--cc=benh@kernel.crashing.org \
--cc=deepthi@linux.vnet.ibm.com \
--cc=g.trinabh@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
/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