diff options
Diffstat (limited to 'arch/m68knommu/kernel/process.c')
| -rw-r--r-- | arch/m68knommu/kernel/process.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c index 2b6c9d32b7a6..c4a33f265dc0 100644 --- a/arch/m68knommu/kernel/process.c +++ b/arch/m68knommu/kernel/process.c | |||
| @@ -45,11 +45,13 @@ asmlinkage void ret_from_fork(void); | |||
| 45 | */ | 45 | */ |
| 46 | void default_idle(void) | 46 | void default_idle(void) |
| 47 | { | 47 | { |
| 48 | while(1) { | 48 | local_irq_disable(); |
| 49 | if (need_resched()) | 49 | while (!need_resched()) { |
| 50 | __asm__("stop #0x2000" : : : "cc"); | 50 | /* This stop will re-enable interrupts */ |
| 51 | schedule(); | 51 | __asm__("stop #0x2000" : : : "cc"); |
| 52 | local_irq_disable(); | ||
| 52 | } | 53 | } |
| 54 | local_irq_enable(); | ||
| 53 | } | 55 | } |
| 54 | 56 | ||
| 55 | void (*idle)(void) = default_idle; | 57 | void (*idle)(void) = default_idle; |
| @@ -63,7 +65,12 @@ void (*idle)(void) = default_idle; | |||
| 63 | void cpu_idle(void) | 65 | void cpu_idle(void) |
| 64 | { | 66 | { |
| 65 | /* endless idle loop with no priority at all */ | 67 | /* endless idle loop with no priority at all */ |
| 66 | idle(); | 68 | while (1) { |
| 69 | idle(); | ||
| 70 | preempt_enable_no_resched(); | ||
| 71 | schedule(); | ||
| 72 | preempt_disable(); | ||
| 73 | } | ||
| 67 | } | 74 | } |
| 68 | 75 | ||
| 69 | void machine_restart(char * __unused) | 76 | void machine_restart(char * __unused) |
