Date: Sun, 27 Jun 2004 05:02:03 GMT From: David Xu <davidxu@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 55899 for review Message-ID: <200406270502.i5R523VU089501@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=55899 Change 55899 by davidxu@davidxu_alona on 2004/06/27 05:01:23 Hand off lwpid to thread at context switching time. Affected files ... .. //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/amd64/include/pthread_md.h#2 edit .. //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/i386/include/pthread_md.h#2 edit .. //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/ia64/include/pthread_md.h#2 edit Differences ... ==== //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/amd64/include/pthread_md.h#2 (text+ko) ==== @@ -235,17 +235,31 @@ static __inline int _thread_switch(struct kcb *kcb, struct tcb *tcb, int setmbox) { + extern int _libkse_debug; + mcontext_t *mc; + if ((kcb == NULL) || (tcb == NULL)) return (-1); kcb->kcb_curtcb = tcb; - if (setmbox != 0) - _amd64_restore_context(&tcb->tcb_tmbx.tm_context.uc_mcontext, - (intptr_t)&tcb->tcb_tmbx, - (intptr_t *)&kcb->kcb_kmbx.km_curthread); - else - _amd64_restore_context(&tcb->tcb_tmbx.tm_context.uc_mcontext, - 0, NULL); - /* We should not reach here. */ + mc = &tcb->tcb_tmbx.tm_context.uc_mcontext; + + if (_libkse_debug == 0) { + tcb->tcb_tmbx.tm_lwp = kcb->kcb_kmbx.km_lwp; + if (setmbox != 0) + _amd64_restore_context(&tcb->tcb_tmbx.tm_context.uc_mcontext, + (intptr_t)&tcb->tcb_tmbx, + (intptr_t *)&kcb->kcb_kmbx.km_curthread); + else + _amd64_restore_context(&tcb->tcb_tmbx.tm_context.uc_mcontext, + 0, NULL); + /* We should not reach here. */ + } else { + if (setmbox) + kse_switchin(&tcb->tcb_tmbx, KSE_SWITCHIN_SETTMBX); + else + kse_switchin(&tcb->tcb_tmbx, 0); + } + return (-1); } #endif ==== //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/i386/include/pthread_md.h#2 (text+ko) ==== @@ -237,16 +237,30 @@ static __inline int _thread_switch(struct kcb *kcb, struct tcb *tcb, int setmbox) { + extern int _libkse_debug; + mcontext_t *mc; + if ((kcb == NULL) || (tcb == NULL)) return (-1); kcb->kcb_curtcb = tcb; - if (setmbox != 0) - _thr_setcontext(&tcb->tcb_tmbx.tm_context.uc_mcontext, - (intptr_t)&tcb->tcb_tmbx, - (intptr_t *)&kcb->kcb_kmbx.km_curthread); - else - _thr_setcontext(&tcb->tcb_tmbx.tm_context.uc_mcontext, 0, NULL); - /* We should not reach here. */ + mc = &tcb->tcb_tmbx.tm_context.uc_mcontext; + if (_libkse_debug == 0) { + tcb->tcb_tmbx.tm_lwp = kcb->kcb_kmbx.km_lwp; + if (setmbox != 0) + _thr_setcontext(&tcb->tcb_tmbx.tm_context.uc_mcontext, + (intptr_t)&tcb->tcb_tmbx, + (intptr_t *)&kcb->kcb_kmbx.km_curthread); + else + _thr_setcontext(&tcb->tcb_tmbx.tm_context.uc_mcontext, + 0, NULL); + /* We should not reach here. */ + } else { + if (setmbox) + kse_switchin(&tcb->tcb_tmbx, KSE_SWITCHIN_SETTMBX); + else + kse_switchin(&tcb->tcb_tmbx, 0); + } + return (-1); } ==== //depot/projects/davidxu_ksedbg/src/lib/libpthread/arch/ia64/include/pthread_md.h#2 (text+ko) ==== @@ -234,10 +234,9 @@ _ia64_break_setcontext(mc); } else if (mc->mc_flags & _MC_FLAGS_SYSCALL_CONTEXT) { if (setmbox) - kse_switchin(mc, (long)&tcb->tcb_tmbx, - (long *)&kcb->kcb_kmbx.km_curthread); + kse_switchin(&tcb->tcb_tmbx, KSE_SWITCHIN_SETTMBX); else - kse_switchin(mc, 0L, NULL); + kse_switchin(&tcb->tcb_tmbx, 0); } else { if (setmbox) _ia64_restore_context(mc, (intptr_t)&tcb->tcb_tmbx,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406270502.i5R523VU089501>