diff options
Diffstat (limited to 'arch/v850')
-rw-r--r-- | arch/v850/kernel/process.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c index 9c708c32c1f0..39cf247cdae4 100644 --- a/arch/v850/kernel/process.c +++ b/arch/v850/kernel/process.c | |||
@@ -36,11 +36,8 @@ extern void ret_from_fork (void); | |||
36 | /* The idle loop. */ | 36 | /* The idle loop. */ |
37 | void default_idle (void) | 37 | void default_idle (void) |
38 | { | 38 | { |
39 | while (1) { | 39 | while (! need_resched ()) |
40 | while (! need_resched ()) | 40 | asm ("halt; nop; nop; nop; nop; nop" ::: "cc"); |
41 | asm ("halt; nop; nop; nop; nop; nop" ::: "cc"); | ||
42 | schedule (); | ||
43 | } | ||
44 | } | 41 | } |
45 | 42 | ||
46 | void (*idle)(void) = default_idle; | 43 | void (*idle)(void) = default_idle; |
@@ -54,7 +51,14 @@ void (*idle)(void) = default_idle; | |||
54 | void cpu_idle (void) | 51 | void cpu_idle (void) |
55 | { | 52 | { |
56 | /* endless idle loop with no priority at all */ | 53 | /* endless idle loop with no priority at all */ |
57 | (*idle) (); | 54 | while (1) { |
55 | while (!need_resched()) | ||
56 | (*idle) (); | ||
57 | |||
58 | preempt_enable_no_resched(); | ||
59 | schedule(); | ||
60 | preempt_disable(); | ||
61 | } | ||
58 | } | 62 | } |
59 | 63 | ||
60 | /* | 64 | /* |