From owner-p4-projects@FreeBSD.ORG Sun Jun 27 05:02:50 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 49F8316A4D0; Sun, 27 Jun 2004 05:02:50 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1011416A4CE for ; Sun, 27 Jun 2004 05:02:50 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id E8AB343D2F for ; Sun, 27 Jun 2004 05:02:49 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i5R524aw089504 for ; Sun, 27 Jun 2004 05:02:04 GMT (envelope-from davidxu@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i5R523VU089501 for perforce@freebsd.org; Sun, 27 Jun 2004 05:02:03 GMT (envelope-from davidxu@freebsd.org) Date: Sun, 27 Jun 2004 05:02:03 GMT Message-Id: <200406270502.i5R523VU089501@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to davidxu@freebsd.org using -f From: David Xu To: Perforce Change Reviews Subject: PERFORCE change 55899 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Jun 2004 05:02:50 -0000 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,