]> git.karo-electronics.de Git - linux-beck.git/commitdiff
microblaze: Implement clear_ums macro and fix SAVE_STATE macro
authorMichal Simek <monstr@monstr.eu>
Tue, 22 Jun 2010 15:46:27 +0000 (17:46 +0200)
committerMichal Simek <monstr@monstr.eu>
Wed, 4 Aug 2010 08:29:44 +0000 (10:29 +0200)
VMS is always setup because VM mode was before
exception/syscall/interrupt. Kernel continues in kernel mode
that's why we have to clear UMS bit if kernel comes from
user space.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/entry.S

index 5318ad375feccc1050ff69a2694ed3f6a4130b0c..5529f64e97e898bdc36318b4589512b02c84a57b 100644 (file)
        nop
        .endm
 
+       .macro  clear_ums
+       msrclr  r11, MSR_UMS
+       nop
+       .endm
+
        .macro  clear_vms_ums
        msrclr  r11, MSR_VMS | MSR_UMS
        nop
        nop
        .endm
 
+       .macro  clear_ums
+       mfs     r11, rmsr
+       nop
+       andni   r11, r11, MSR_UMS
+       mts     rmsr,r11
+       nop
+       .endm
+
        .macro  clear_vms_ums
        mfs     r11, rmsr
        nop
@@ -526,6 +539,8 @@ C_ENTRY(sys_rt_sigreturn_wrapper):
        swi     r0, r1, PTO + PT_MODE; /* Was in user-mode.  */         \
        lwi     r11, r0, TOPHYS(PER_CPU(ENTRY_SP));                     \
        swi     r11, r1, PTO+PT_R1; /* Store user SP.  */               \
+       /* MS: I am clearing UMS even in case when I come from kernel space */ \
+       clear_ums;                                                      \
 2:     lwi     CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE));
 
 C_ENTRY(full_exception_trap):