From 5888af272d86d59b4dea8386699c1d8a2e951359 Mon Sep 17 00:00:00 2001 From: marcel Date: Fri, 19 Sep 2003 23:00:28 +0000 Subject: _ia64_break_setcontext() now takes a mcontext_t. While here, define THR_SETCONTEXT as PANIC(). The THR_SETCONTEXT macro is currently not used, which means that the definition we had could be wrong, overly pessimistic or unknowingly right. I don't like the odds... The new _ia64_break_setcontext() and corresponding kernel fixes make KSE mostly usable. There's still a case where we don't properly restore a context and end up with a NaT consumption fault (typically an indication for not handling NaT collection points correctly), but at least now mutex_d works... --- lib/libkse/arch/ia64/include/pthread_md.h | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'lib/libkse') diff --git a/lib/libkse/arch/ia64/include/pthread_md.h b/lib/libkse/arch/ia64/include/pthread_md.h index 95f1d2d..a0d4236 100644 --- a/lib/libkse/arch/ia64/include/pthread_md.h +++ b/lib/libkse/arch/ia64/include/pthread_md.h @@ -34,14 +34,7 @@ #include #define THR_GETCONTEXT(ucp) _ia64_save_context(&(ucp)->uc_mcontext) -#define THR_SETCONTEXT(ucp) \ - do { \ - if ((ucp)->uc_mcontext.mc_flags & _MC_FLAGS_ASYNC_CONTEXT) \ - _ia64_break_setcontext(ucp); \ - else \ - _ia64_restore_context(&(ucp)->uc_mcontext, 0, \ - NULL); \ - } while (0) +#define THR_SETCONTEXT(ucp) PANIC("THR_SETCONTEXT() now in use!\n") #define PER_THREAD @@ -200,7 +193,7 @@ _get_curkse(void) return (_tcb->tcb_curkcb->kcb_kse); } -void _ia64_break_setcontext(ucontext_t *ucp); +void _ia64_break_setcontext(mcontext_t *mc); void _ia64_enter_uts(kse_func_t uts, struct kse_mailbox *km, void *stack, size_t stacksz); int _ia64_restore_context(mcontext_t *mc, intptr_t val, intptr_t *loc); @@ -236,7 +229,7 @@ _thread_switch(struct kcb *kcb, struct tcb *tcb, int setmbox) (intptr_t)&kcb->kcb_kmbx.km_curthread; mc->mc_special.isr = (intptr_t)&tcb->tcb_tmbx; } - _ia64_break_setcontext(&tcb->tcb_tmbx.tm_context); + _ia64_break_setcontext(mc); } else { if (setmbox) _ia64_restore_context(mc, (intptr_t)&tcb->tcb_tmbx, -- cgit v1.1