diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2013-03-21 17:49:52 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2013-04-08 11:39:26 -0400 |
commit | cdbedc61c8d0122ad682815936f0d11df1fe5f57 (patch) | |
tree | 20f2c0b6aaf95d0e63ef1cf44449a1c39e8cff7c /arch | |
parent | e962bb9e9cf73b8c8893c95903e791dd5ec19fb4 (diff) |
mips: Use generic idle loop
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Link: http://lkml.kernel.org/r/20130321215234.754954871@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/Kconfig | 1 | ||||
-rw-r--r-- | arch/mips/kernel/process.c | 48 | ||||
-rw-r--r-- | arch/mips/kernel/smp.c | 2 |
3 files changed, 17 insertions, 34 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 51244bf97271..e1a3d02af637 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -34,6 +34,7 @@ config MIPS | |||
34 | select HAVE_MEMBLOCK_NODE_MAP | 34 | select HAVE_MEMBLOCK_NODE_MAP |
35 | select ARCH_DISCARD_MEMBLOCK | 35 | select ARCH_DISCARD_MEMBLOCK |
36 | select GENERIC_SMP_IDLE_THREAD | 36 | select GENERIC_SMP_IDLE_THREAD |
37 | select GENERIC_IDLE_LOOP | ||
37 | select BUILDTIME_EXTABLE_SORT | 38 | select BUILDTIME_EXTABLE_SORT |
38 | select GENERIC_CLOCKEVENTS | 39 | select GENERIC_CLOCKEVENTS |
39 | select GENERIC_CMOS_UPDATE | 40 | select GENERIC_CMOS_UPDATE |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 3be4405c2d14..cfc742d75b7f 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -41,44 +41,26 @@ | |||
41 | #include <asm/inst.h> | 41 | #include <asm/inst.h> |
42 | #include <asm/stacktrace.h> | 42 | #include <asm/stacktrace.h> |
43 | 43 | ||
44 | /* | 44 | #ifdef CONFIG_HOTPLUG_CPU |
45 | * The idle thread. There's no useful work to be done, so just try to conserve | 45 | void arch_cpu_idle_dead(void) |
46 | * power and have a low exit latency (ie sit in a loop waiting for somebody to | ||
47 | * say that they'd like to reschedule) | ||
48 | */ | ||
49 | void __noreturn cpu_idle(void) | ||
50 | { | 46 | { |
51 | int cpu; | 47 | /* What the heck is this check doing ? */ |
52 | 48 | if (!cpu_isset(smp_processor_id(), cpu_callin_map)) | |
53 | /* CPU is going idle. */ | 49 | play_dead(); |
54 | cpu = smp_processor_id(); | 50 | } |
51 | #endif | ||
55 | 52 | ||
56 | /* endless idle loop with no priority at all */ | 53 | void arch_cpu_idle(void) |
57 | while (1) { | 54 | { |
58 | tick_nohz_idle_enter(); | ||
59 | rcu_idle_enter(); | ||
60 | while (!need_resched() && cpu_online(cpu)) { | ||
61 | #ifdef CONFIG_MIPS_MT_SMTC | 55 | #ifdef CONFIG_MIPS_MT_SMTC |
62 | extern void smtc_idle_loop_hook(void); | 56 | extern void smtc_idle_loop_hook(void); |
63 | 57 | ||
64 | smtc_idle_loop_hook(); | 58 | smtc_idle_loop_hook(); |
65 | #endif | 59 | #endif |
66 | 60 | if (cpu_wait) | |
67 | if (cpu_wait) { | 61 | (*cpu_wait)(); |
68 | /* Don't trace irqs off for idle */ | 62 | else |
69 | stop_critical_timings(); | 63 | local_irq_enable(); |
70 | (*cpu_wait)(); | ||
71 | start_critical_timings(); | ||
72 | } | ||
73 | } | ||
74 | #ifdef CONFIG_HOTPLUG_CPU | ||
75 | if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map)) | ||
76 | play_dead(); | ||
77 | #endif | ||
78 | rcu_idle_exit(); | ||
79 | tick_nohz_idle_exit(); | ||
80 | schedule_preempt_disabled(); | ||
81 | } | ||
82 | } | 64 | } |
83 | 65 | ||
84 | asmlinkage void ret_from_fork(void); | 66 | asmlinkage void ret_from_fork(void); |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 66bf4e22d9b9..aee04af213c5 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -139,7 +139,7 @@ asmlinkage __cpuinit void start_secondary(void) | |||
139 | WARN_ON_ONCE(!irqs_disabled()); | 139 | WARN_ON_ONCE(!irqs_disabled()); |
140 | mp_ops->smp_finish(); | 140 | mp_ops->smp_finish(); |
141 | 141 | ||
142 | cpu_idle(); | 142 | cpu_startup_entry(CPUHP_ONLINE); |
143 | } | 143 | } |
144 | 144 | ||
145 | /* | 145 | /* |