diff options
Diffstat (limited to 'arch/sparc/kernel/rtrap.S')
-rw-r--r-- | arch/sparc/kernel/rtrap.S | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/arch/sparc/kernel/rtrap.S b/arch/sparc/kernel/rtrap.S index 8d46d487e..68f3dc9af 100644 --- a/arch/sparc/kernel/rtrap.S +++ b/arch/sparc/kernel/rtrap.S @@ -1,4 +1,4 @@ -/* $Id: rtrap.S,v 1.47 1997/08/10 04:49:24 davem Exp $ +/* $Id: rtrap.S,v 1.49 1997/12/14 23:24:24 ecd Exp $ * rtrap.S: Return from Sparc trap low-level code. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -65,27 +65,24 @@ C_LABEL(ret_trap_lockless_ipi): wr %t_psr, 0x0, %psr b ret_trap_kernel - mov 1, %o0 + nop 1: - ld [%curptr + AOFF_task_processor], %o1 ld [%twin_tmp1 + %lo(C_LABEL(need_resched))], %g2 - sll %o0, %o1, %o0 - - andcc %g2, %o0, %g0 + orcc %g2, %g0, %g0 be signal_p - nop + ld [%curptr + AOFF_task_sigpending], %g2 call C_LABEL(schedule) nop + ld [%curptr + AOFF_task_sigpending], %g2 signal_p: - ld [%curptr + AOFF_task_signal], %g2 - ld [%curptr + AOFF_task_blocked], %o0 - andncc %g2, %o0, %g0 - be,a ret_trap_continue + cmp %g2, 0 + bz,a ret_trap_continue ld [%sp + REGWIN_SZ + PT_PSR], %t_psr + clr %o0 mov %l5, %o2 mov %l6, %o3 call C_LABEL(do_signal) @@ -110,7 +107,8 @@ ret_trap_continue: call C_LABEL(try_to_clear_window_buffer) add %sp, REGWIN_SZ, %o0 - b,a signal_p + b signal_p + ld [%curptr + AOFF_task_sigpending], %g2 ret_trap_nobufwins: /* Load up the user's out registers so we can pull @@ -179,7 +177,8 @@ ret_trap_unaligned_pc: call C_LABEL(do_memaccess_unaligned) nop - b,a signal_p + b signal_p + ld [%curptr + AOFF_task_sigpending], %g2 ret_trap_kernel: /* Will the rett land us in the invalid window? */ @@ -228,7 +227,8 @@ ret_trap_user_stack_is_bolixed: call C_LABEL(window_ret_fault) add %sp, REGWIN_SZ, %o0 - b,a signal_p + b signal_p + ld [%curptr + AOFF_task_sigpending], %g2 .globl C_LABEL(sun4c_rett_stackchk) C_LABEL(sun4c_rett_stackchk): |