From 0045a4890c1cd18c9d2770a82b411cbf66e3214b Mon Sep 17 00:00:00 2001 From: Greg Ungerer Date: Fri, 3 Jun 2005 11:35:20 +1000 Subject: [PATCH] --- yaml --- r: 1819 b: refs/heads/master c: b05a720b374ac6af05b2fd4c70bb2c61a9f461ca h: refs/heads/master i: 1817: 247a6bdcd336a93fe3d500384567ad53f5a5a569 1815: c3b88cb94ab422f0902e24f688ea2da9aa8b0cfb v: v3 --- [refs] | 2 +- trunk/arch/m68knommu/kernel/process.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 5fba0da963a2..a6d4a5b5eeea 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f4d340cf869b2b63e1043eed72aa2eab6fa2cb2c +refs/heads/master: b05a720b374ac6af05b2fd4c70bb2c61a9f461ca diff --git a/trunk/arch/m68knommu/kernel/process.c b/trunk/arch/m68knommu/kernel/process.c index 2b6c9d32b7a6..c4a33f265dc0 100644 --- a/trunk/arch/m68knommu/kernel/process.c +++ b/trunk/arch/m68knommu/kernel/process.c @@ -45,11 +45,13 @@ asmlinkage void ret_from_fork(void); */ void default_idle(void) { - while(1) { - if (need_resched()) - __asm__("stop #0x2000" : : : "cc"); - schedule(); + local_irq_disable(); + while (!need_resched()) { + /* This stop will re-enable interrupts */ + __asm__("stop #0x2000" : : : "cc"); + local_irq_disable(); } + local_irq_enable(); } void (*idle)(void) = default_idle; @@ -63,7 +65,12 @@ void (*idle)(void) = default_idle; void cpu_idle(void) { /* endless idle loop with no priority at all */ - idle(); + while (1) { + idle(); + preempt_enable_no_resched(); + schedule(); + preempt_disable(); + } } void machine_restart(char * __unused)