Browse Source

MN10300: Fix the preemption resume_kernel() routine

Fix the preemption resume_kernel() routine by inverting the test to see
whether interrupts are off (IM7 is all enabled, not all disabled).

Furthermore, interrupts should be disabled on entry to resume_kernel() so that
they're correctly set for jumping to restore_all() and doing the need
reschedule test.

Signed-off-by: Akira Takeuchi <takeuchi.akr@jp.panasonic.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Akira Takeuchi 16 years ago
parent
commit
24646bd226
1 changed files with 2 additions and 1 deletions
  1. 2 1
      arch/mn10300/kernel/entry.S

+ 2 - 1
arch/mn10300/kernel/entry.S

@@ -180,6 +180,7 @@ ENTRY(resume_userspace)
 
 
 #ifdef CONFIG_PREEMPT
 #ifdef CONFIG_PREEMPT
 ENTRY(resume_kernel)
 ENTRY(resume_kernel)
+	__cli
 	mov	(TI_preempt_count,a2),d0	# non-zero preempt_count ?
 	mov	(TI_preempt_count,a2),d0	# non-zero preempt_count ?
 	cmp	0,d0
 	cmp	0,d0
 	bne	restore_all
 	bne	restore_all
@@ -190,7 +191,7 @@ need_resched:
 	mov	(REG_EPSW,fp),d0
 	mov	(REG_EPSW,fp),d0
 	and	EPSW_IM,d0
 	and	EPSW_IM,d0
 	cmp	EPSW_IM_7,d0		# interrupts off (exception path) ?
 	cmp	EPSW_IM_7,d0		# interrupts off (exception path) ?
-	beq	restore_all
+	bne	restore_all
 	call	preempt_schedule_irq[],0
 	call	preempt_schedule_irq[],0
 	jmp	need_resched
 	jmp	need_resched
 #endif
 #endif