aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/process_32.c
diff options
context:
space:
mode:
authorGlauber de Oliveira Costa <gcosta@redhat.com>2008-03-19 13:25:06 -0400
committerIngo Molnar <mingo@elte.hu>2008-04-17 11:41:00 -0400
commit3b22ec7b13cb31e0d87fbc0aabe14caaaad309e8 (patch)
tree9a68b5a0a8d7b63d5773f61c27237f7d1f2290ec /arch/x86/kernel/process_32.c
parent1d89a7f072d4f76f0538edfb474d527066ee7838 (diff)
x86: always enable irqs when entering idle
This matches x86_64 behaviour, which is a superior one IMHO Signed-off-by: Glauber Costa <gcosta@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/process_32.c')
-rw-r--r--arch/x86/kernel/process_32.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index ec05fb750df..08c41ed5e80 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -127,6 +127,7 @@ void default_idle(void)
127 local_irq_enable(); 127 local_irq_enable();
128 current_thread_info()->status |= TS_POLLING; 128 current_thread_info()->status |= TS_POLLING;
129 } else { 129 } else {
130 local_irq_enable();
130 /* loop is done by the caller */ 131 /* loop is done by the caller */
131 cpu_relax(); 132 cpu_relax();
132 } 133 }
@@ -142,6 +143,7 @@ EXPORT_SYMBOL(default_idle);
142 */ 143 */
143static void poll_idle(void) 144static void poll_idle(void)
144{ 145{
146 local_irq_enable();
145 cpu_relax(); 147 cpu_relax();
146} 148}
147 149
@@ -248,8 +250,11 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
248 __monitor((void *)&current_thread_info()->flags, 0, 0); 250 __monitor((void *)&current_thread_info()->flags, 0, 0);
249 smp_mb(); 251 smp_mb();
250 if (!need_resched()) 252 if (!need_resched())
251 __mwait(ax, cx); 253 __sti_mwait(ax, cx);
252 } 254 else
255 local_irq_enable();
256 } else
257 local_irq_enable();
253} 258}
254 259
255/* Default MONITOR/MWAIT with no hints, used for default C1 state */ 260/* Default MONITOR/MWAIT with no hints, used for default C1 state */