|
@@ -34,37 +34,9 @@ __handle_preemption:
|
|
|
__handle_user_windows:
|
|
|
call fault_in_user_windows
|
|
|
wrpr %g0, RTRAP_PSTATE, %pstate
|
|
|
- wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
|
|
- /* Redo sched+sig checks */
|
|
|
- ldx [%g6 + TI_FLAGS], %l0
|
|
|
- andcc %l0, _TIF_NEED_RESCHED, %g0
|
|
|
-
|
|
|
- be,pt %xcc, 1f
|
|
|
- nop
|
|
|
- call schedule
|
|
|
- wrpr %g0, RTRAP_PSTATE, %pstate
|
|
|
- wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
|
|
- ldx [%g6 + TI_FLAGS], %l0
|
|
|
-
|
|
|
-1: andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
|
|
|
- be,pt %xcc, __handle_user_windows_continue
|
|
|
- nop
|
|
|
- mov %l5, %o1
|
|
|
- add %sp, PTREGS_OFF, %o0
|
|
|
- mov %l0, %o2
|
|
|
-
|
|
|
- call do_notify_resume
|
|
|
- wrpr %g0, RTRAP_PSTATE, %pstate
|
|
|
- wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
|
|
- /* Signal delivery can modify pt_regs tstate, so we must
|
|
|
- * reload it.
|
|
|
- */
|
|
|
- ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
|
|
|
- sethi %hi(0xf << 20), %l4
|
|
|
- and %l1, %l4, %l4
|
|
|
- ba,pt %xcc, __handle_user_windows_continue
|
|
|
+ ba,pt %xcc, __handle_preemption_continue
|
|
|
+ wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
|
|
|
|
|
- andn %l1, %l4, %l1
|
|
|
__handle_userfpu:
|
|
|
rd %fprs, %l5
|
|
|
andcc %l5, FPRS_FEF, %g0
|
|
@@ -87,7 +59,7 @@ __handle_signal:
|
|
|
ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
|
|
|
sethi %hi(0xf << 20), %l4
|
|
|
and %l1, %l4, %l4
|
|
|
- ba,pt %xcc, __handle_signal_continue
|
|
|
+ ba,pt %xcc, __handle_preemption_continue
|
|
|
andn %l1, %l4, %l1
|
|
|
|
|
|
/* When returning from a NMI (%pil==15) interrupt we want to
|
|
@@ -177,11 +149,9 @@ __handle_preemption_continue:
|
|
|
bne,pn %xcc, __handle_preemption
|
|
|
andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
|
|
|
bne,pn %xcc, __handle_signal
|
|
|
-__handle_signal_continue:
|
|
|
ldub [%g6 + TI_WSAVED], %o2
|
|
|
brnz,pn %o2, __handle_user_windows
|
|
|
nop
|
|
|
-__handle_user_windows_continue:
|
|
|
sethi %hi(TSTATE_PEF), %o0
|
|
|
andcc %l1, %o0, %g0
|
|
|
|