diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-04-29 21:13:14 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-04-29 21:13:14 +0000 |
commit | 19c9bba94152148523ba0f7ef7cffe3d45656b11 (patch) | |
tree | 40b1cb534496a7f1ca0f5c314a523c69f1fee464 /arch/sparc/kernel/wuf.S | |
parent | 7206675c40394c78a90e74812bbdbf8cf3cca1be (diff) |
Import of Linux/MIPS 2.1.36
Diffstat (limited to 'arch/sparc/kernel/wuf.S')
-rw-r--r-- | arch/sparc/kernel/wuf.S | 24 |
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 |