summaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/wuf.S
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-04-29 21:13:14 +0000
committer <ralf@linux-mips.org>1997-04-29 21:13:14 +0000
commit19c9bba94152148523ba0f7ef7cffe3d45656b11 (patch)
tree40b1cb534496a7f1ca0f5c314a523c69f1fee464 /arch/sparc/kernel/wuf.S
parent7206675c40394c78a90e74812bbdbf8cf3cca1be (diff)
Import of Linux/MIPS 2.1.36
Diffstat (limited to 'arch/sparc/kernel/wuf.S')
-rw-r--r--arch/sparc/kernel/wuf.S24
1 files changed, 14 insertions, 10 deletions
diff --git a/arch/sparc/kernel/wuf.S b/arch/sparc/kernel/wuf.S
index 2a999c606..7550dd627 100644
--- a/arch/sparc/kernel/wuf.S
+++ b/arch/sparc/kernel/wuf.S
@@ -1,4 +1,4 @@
-/* $Id: wuf.S,v 1.27 1996/10/11 01:00:06 davem Exp $
+/* $Id: wuf.S,v 1.31 1997/03/04 16:26:37 jj Exp $
* wuf.S: Window underflow trap handler for the Sparc.
*
* Copyright (C) 1995 David S. Miller
@@ -145,7 +145,7 @@ fwin_user_stack_is_bolixed:
* to the trap window and call c-code to deal with this.
*/
LOAD_CURRENT(l4, l5)
- ld [%l4 + TASK_SAVED_KSTACK], %l5
+ ld [%l4 + AOFF_task_saved_kernel_stack], %l5
/* Store globals into pt_regs frame. */
STORE_PT_GLOBALS(l5)
@@ -178,14 +178,11 @@ fwin_user_stack_is_bolixed:
/* Fix users window mask and buffer save count. */
mov 0x1, %g5
sll %g5, %g3, %g5
- st %g5, [%curptr + THREAD_UMASK] ! one live user window still
- st %g0, [%curptr + THREAD_W_SAVED] ! no windows in the buffer
-
- ENTER_SYSCALL
+ st %g5, [%curptr + AOFF_task_tss + AOFF_thread_uwinmask] ! one live user window still
+ st %g0, [%curptr + AOFF_task_tss + AOFF_thread_w_saved] ! no windows in the buffer
wr %t_psr, PSR_ET, %psr ! enable traps
- WRITE_PAUSE
-
+ nop
call C_LABEL(window_underflow_fault)
mov %g4, %o0
@@ -338,14 +335,21 @@ C_LABEL(srmmu_fwin_stackchk):
mov AC_M_SFSR, %twin_tmp2
lda [%twin_tmp2] ASI_M_MMUREGS, %twin_tmp2 ! read fault status
andcc %twin_tmp2, 0x2, %g0 ! did fault occur?
- be,a fwin_user_finish_up + 0x4
- wr %t_psr, 0x0, %psr
+
+ bne 1f ! yep, cleanup
+ nop
+
+ wr %t_psr, 0x0, %psr
+ nop
+ b fwin_user_finish_up + 0x4
+ nop
/* Did I ever tell you about my window lobotomy?
* anyways... fwin_user_stack_is_bolixed expects
* to be in window 'W' so make it happy or else
* we watchdog badly.
*/
+1:
restore %g0, %g0, %g0
b fwin_user_stack_is_bolixed ! oh well
restore %g0, %g0, %g0