B Benjamin Herrenschmidt #
Message details and related content
On Mon, 2011-01-17 at 12:07 +0100, Peter Zijlstra wrote:
For future rework of try_to_wake_up() we'd like to push part of that onto the CPU the task is actually going to run on, in order to do so we need a generic callback from the existing scheduler IPI. This patch introduces such a generic callback: scheduler_ipi() and implements it as a NOP. I visited existing smp_send_reschedule() implementations and tried to add a call to scheduler_ipi() in their handler part, but esp. for MIPS I'm not quite sure I actually got all of them. Also, while reading through all this, I noticed the blackfin SMP code looks to be broken, it simply discards any IPI when low on memory.
Beware of false positive, I've used "fake" reschedule IPIs in the past
for other things (like kicking a CPU out of sleep state for unrelated
reasons). Nothing that I know that is upstream today but some of that
might come back. I'd like to avoid having to add an atomic to know if
it's a real reschedule, will the scheduler be smart enough to not bother
with false positives ?
Cheers,
Ben.
quoted hunk
Signed-off-by: Peter Zijlstra <redacted> --- arch/alpha/kernel/smp.c | 1 + arch/arm/kernel/smp.c | 1 + arch/blackfin/mach-common/smp.c | 3 ++- arch/cris/arch-v32/kernel/smp.c | 13 ++++++++----- arch/ia64/kernel/irq_ia64.c | 2 ++ arch/ia64/xen/irq_xen.c | 10 +++++++++- arch/m32r/kernel/smp.c | 2 +- arch/mips/kernel/smtc.c | 1 + arch/mips/sibyte/bcm1480/smp.c | 7 +++---- arch/mips/sibyte/sb1250/smp.c | 7 +++---- arch/mn10300/kernel/smp.c | 2 +- arch/parisc/kernel/smp.c | 1 + arch/powerpc/kernel/smp.c | 1 + arch/s390/kernel/smp.c | 6 +++--- arch/sh/kernel/smp.c | 2 ++ arch/sparc/kernel/smp_32.c | 2 +- arch/sparc/kernel/smp_64.c | 1 + arch/tile/kernel/smp.c | 1 + arch/um/kernel/smp.c | 2 +- arch/x86/kernel/smp.c | 1 + arch/x86/xen/smp.c | 1 + include/linux/sched.h | 1 + 22 files changed, 46 insertions(+), 22 deletions(-)diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index 42aa078..c4a570b 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c@@ -587,6 +587,7 @@ handle_ipi(struct pt_regs *regs) case IPI_RESCHEDULE: /* Reschedule callback. Everything to be done is done by the interrupt return path. */ + scheduler_ipi(); break; case IPI_CALL_FUNC:diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 9066473..ffde790 100644