diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/kernel/process.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 51922b98086a..17685abaf496 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -268,10 +268,16 @@ cpu_idle (void) | |||
268 | 268 | ||
269 | /* endless idle loop with no priority at all */ | 269 | /* endless idle loop with no priority at all */ |
270 | while (1) { | 270 | while (1) { |
271 | if (can_do_pal_halt) | 271 | if (can_do_pal_halt) { |
272 | current_thread_info()->status &= ~TS_POLLING; | 272 | current_thread_info()->status &= ~TS_POLLING; |
273 | else | 273 | /* |
274 | * TS_POLLING-cleared state must be visible before we | ||
275 | * test NEED_RESCHED: | ||
276 | */ | ||
277 | smp_mb(); | ||
278 | } else { | ||
274 | current_thread_info()->status |= TS_POLLING; | 279 | current_thread_info()->status |= TS_POLLING; |
280 | } | ||
275 | 281 | ||
276 | if (!need_resched()) { | 282 | if (!need_resched()) { |
277 | void (*idle)(void); | 283 | void (*idle)(void); |