diff options
author | Glauber de Oliveira Costa <gcosta@redhat.com> | 2008-03-19 17:25:06 (GMT) |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-17 15:41:00 (GMT) |
commit | 3b22ec7b13cb31e0d87fbc0aabe14caaaad309e8 (patch) | |
tree | 9a68b5a0a8d7b63d5773f61c27237f7d1f2290ec | |
parent | 1d89a7f072d4f76f0538edfb474d527066ee7838 (diff) | |
download | linux-3b22ec7b13cb31e0d87fbc0aabe14caaaad309e8.tar.xz |
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>
-rw-r--r-- | arch/x86/kernel/process_32.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index ec05fb7..08c41ed 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -127,6 +127,7 @@ void default_idle(void) local_irq_enable(); current_thread_info()->status |= TS_POLLING; } else { + local_irq_enable(); /* loop is done by the caller */ cpu_relax(); } @@ -142,6 +143,7 @@ EXPORT_SYMBOL(default_idle); */ static void poll_idle(void) { + local_irq_enable(); cpu_relax(); } @@ -248,8 +250,11 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx) __monitor((void *)¤t_thread_info()->flags, 0, 0); smp_mb(); if (!need_resched()) - __mwait(ax, cx); - } + __sti_mwait(ax, cx); + else + local_irq_enable(); + } else + local_irq_enable(); } /* Default MONITOR/MWAIT with no hints, used for default C1 state */ |