Преглед изворни кода

ARM: 8034/1: Disable preemption in iwmmxt_task_enable()

This patch is in preparation for calling the iwmmxt_task_enable()
function with interrupts enabled.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Catalin Marinas пре 11 година
родитељ
комит
431a84b1a4
1 измењених фајлова са 11 додато и 3 уклоњено
  1. 11 3
      arch/arm/kernel/iwmmxt.S

+ 11 - 3
arch/arm/kernel/iwmmxt.S

@@ -18,6 +18,7 @@
 #include <asm/ptrace.h>
 #include <asm/ptrace.h>
 #include <asm/thread_info.h>
 #include <asm/thread_info.h>
 #include <asm/asm-offsets.h>
 #include <asm/asm-offsets.h>
+#include <asm/assembler.h>
 
 
 #if defined(CONFIG_CPU_PJ4)
 #if defined(CONFIG_CPU_PJ4)
 #define PJ4(code...)		code
 #define PJ4(code...)		code
@@ -65,13 +66,14 @@
  */
  */
 
 
 ENTRY(iwmmxt_task_enable)
 ENTRY(iwmmxt_task_enable)
+	inc_preempt_count r10, r3
 
 
 	XSC(mrc	p15, 0, r2, c15, c1, 0)
 	XSC(mrc	p15, 0, r2, c15, c1, 0)
 	PJ4(mrc p15, 0, r2, c1, c0, 2)
 	PJ4(mrc p15, 0, r2, c1, c0, 2)
 	@ CP0 and CP1 accessible?
 	@ CP0 and CP1 accessible?
 	XSC(tst	r2, #0x3)
 	XSC(tst	r2, #0x3)
 	PJ4(tst	r2, #0xf)
 	PJ4(tst	r2, #0xf)
-	movne	pc, lr				@ if so no business here
+	bne	4f				@ if so no business here
 	@ enable access to CP0 and CP1
 	@ enable access to CP0 and CP1
 	XSC(orr	r2, r2, #0x3)
 	XSC(orr	r2, r2, #0x3)
 	XSC(mcr	p15, 0, r2, c15, c1, 0)
 	XSC(mcr	p15, 0, r2, c15, c1, 0)
@@ -132,7 +134,7 @@ concan_dump:
 	wstrd	wR15, [r1, #MMX_WR15]
 	wstrd	wR15, [r1, #MMX_WR15]
 
 
 2:	teq	r0, #0				@ anything to load?
 2:	teq	r0, #0				@ anything to load?
-	moveq	pc, lr
+	beq	3f
 
 
 concan_load:
 concan_load:
 
 
@@ -165,8 +167,14 @@ concan_load:
 	@ clear CUP/MUP (only if r1 != 0)
 	@ clear CUP/MUP (only if r1 != 0)
 	teq	r1, #0
 	teq	r1, #0
 	mov 	r2, #0
 	mov 	r2, #0
-	moveq	pc, lr
+	beq	3f
 	tmcr	wCon, r2
 	tmcr	wCon, r2
+
+3:
+#ifdef CONFIG_PREEMPT_COUNT
+	get_thread_info r10
+#endif
+4:	dec_preempt_count r10, r3
 	mov	pc, lr
 	mov	pc, lr
 
 
 /*
 /*