From owner-freebsd-current Tue Nov 26 3:38:13 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A700C37B401 for ; Tue, 26 Nov 2002 03:38:05 -0800 (PST) Received: from alpha.develop.ferrari.net (host1.ferrari-electronic.de [62.159.79.193]) by mx1.FreeBSD.org (Postfix) with ESMTP id F1A5343EAF for ; Tue, 26 Nov 2002 03:38:02 -0800 (PST) (envelope-from robert@ferrari-electronic.de) Received: (from robert@localhost) by alpha.develop.ferrari.net (8.11.6/8.11.6/SuSE Linux 0.5) id gAQBbPD23891; Tue, 26 Nov 2002 12:37:25 +0100 Date: Tue, 26 Nov 2002 12:37:25 +0100 From: Robert Drehmel To: Philip Paeps Cc: current@FreeBSD.ORG Subject: Re: I'm impressed, but ... Message-ID: <20021126123725.A23726@alpha.develop.ferrari.net> References: <20021125004934.GA604@juno.home.paeps.cx> <20021125194122.GA17986@angelica.unixdaemons.com> <20021125210423.GA617@juno.home.paeps.cx> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20021125210423.GA617@juno.home.paeps.cx> User-Agent: Mutt/1.3.22.1i Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Mon, Nov 25, 2002 at 10:04:23PM +0100, Philip Paeps wrote: > Before it is a few megs of the same. Basically Mutt reading my mailbox. > Anything else I can do to help? You could give the attached patch a try. Were you by any chance using truss(1) just before mutt started to hang? ciao, -robert Index: src/sys/alpha/alpha/trap.c =================================================================== RCS file: /home/ncvs/src/sys/alpha/alpha/trap.c,v retrieving revision 1.102 diff -u -r1.102 trap.c --- src/sys/alpha/alpha/trap.c 24 Oct 2002 23:09:47 -0000 1.102 +++ src/sys/alpha/alpha/trap.c 26 Nov 2002 10:51:25 -0000 @@ -738,7 +738,8 @@ td->td_retval[0] = 0; td->td_retval[1] = 0; - STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK)); + STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK), + "syscall entry"); error = (*callp->sy_call)(td, args + hidden); } @@ -784,7 +785,7 @@ * register set. If we ever support an emulation where this * is not the case, this code will need to be revisited. */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "syscall exit"); #ifdef DIAGNOSTIC cred_free_thread(td); Index: src/sys/i386/i386/trap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/trap.c,v retrieving revision 1.237 diff -u -r1.237 trap.c --- src/sys/i386/i386/trap.c 7 Nov 2002 01:34:23 -0000 1.237 +++ src/sys/i386/i386/trap.c 26 Nov 2002 10:51:26 -0000 @@ -1028,7 +1028,7 @@ td->td_retval[0] = 0; td->td_retval[1] = frame.tf_edx; - STOPEVENT(p, S_SCE, narg); + STOPEVENT(p, S_SCE, narg, "syscall entry"); error = (*callp->sy_call)(td, args); } @@ -1092,7 +1092,7 @@ * register set. If we ever support an emulation where this * is not the case, this code will need to be revisited. */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "syscall exit"); #ifdef DIAGNOSTIC cred_free_thread(td); Index: src/sys/ia64/ia64/trap.c =================================================================== RCS file: /home/ncvs/src/sys/ia64/ia64/trap.c,v retrieving revision 1.65 diff -u -r1.65 trap.c --- src/sys/ia64/ia64/trap.c 24 Oct 2002 23:09:48 -0000 1.65 +++ src/sys/ia64/ia64/trap.c 26 Nov 2002 10:51:28 -0000 @@ -852,7 +852,8 @@ td->td_retval[0] = 0; td->td_retval[1] = 0; - STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK)); + STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK), + "syscall entry"); error = (*callp->sy_call)(td, args); } @@ -900,7 +901,7 @@ * register set. If we ever support an emulation where this * is not the case, this code will need to be revisited. */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "syscall exit"); #ifdef DIAGNOSTIC cred_free_thread(td); @@ -1013,7 +1014,7 @@ td->td_retval[0] = 0; td->td_retval[1] = framep->tf_r[FRAME_R10]; /* edx */ - STOPEVENT(p, S_SCE, narg); + STOPEVENT(p, S_SCE, narg, "ia32 syscall entry"); error = (*callp->sy_call)(td, args64); } @@ -1077,7 +1078,7 @@ * register set. If we ever support an emulation where this * is not the case, this code will need to be revisited. */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "ia32 syscall exit"); #ifdef DIAGNOSTIC cred_free_thread(td); Index: src/sys/kern/kern_exec.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_exec.c,v retrieving revision 1.201 diff -u -r1.201 kern_exec.c --- src/sys/kern/kern_exec.c 25 Nov 2002 04:37:44 -0000 1.201 +++ src/sys/kern/kern_exec.c 26 Nov 2002 10:51:29 -0000 @@ -563,12 +563,6 @@ KNOTE(&p->p_klist, NOTE_EXEC); p->p_flag &= ~P_INEXEC; - /* - * If tracing the process, trap to debugger so breakpoints - * can be set before the program executes. - */ - _STOPEVENT(p, S_EXEC, 0); - if (p->p_flag & P_TRACED) psignal(p, SIGTRAP); @@ -640,8 +634,14 @@ if (imgp->object) vm_object_deallocate(imgp->object); - if (error == 0) + if (error == 0) { + /* + * If tracing the process, trap to debugger so breakpoints + * can be set before the program executes. + */ + STOPEVENT(p, S_EXEC, 0, "exec"); goto done2; + } exec_fail: /* we're done here, clear P_INEXEC */ Index: src/sys/kern/kern_exit.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_exit.c,v retrieving revision 1.186 diff -u -r1.186 kern_exit.c --- src/sys/kern/kern_exit.c 25 Nov 2002 04:37:44 -0000 1.186 +++ src/sys/kern/kern_exit.c 26 Nov 2002 10:51:29 -0000 @@ -227,7 +227,7 @@ #ifdef PGINPROF vmsizmon(); #endif - STOPEVENT(p, S_EXIT, rv); + STOPEVENT(p, S_EXIT, rv, "exit"); wakeup(&p->p_stype); /* Wakeup anyone in procfs' PIOCWAIT */ /* Index: src/sys/kern/kern_sig.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_sig.c,v retrieving revision 1.197 diff -u -r1.197 kern_sig.c --- src/sys/kern/kern_sig.c 25 Oct 2002 19:10:57 -0000 1.197 +++ src/sys/kern/kern_sig.c 26 Nov 2002 10:51:32 -0000 @@ -1687,7 +1687,7 @@ sig = sig_ffs(&mask); prop = sigprop(sig); - _STOPEVENT(p, S_SIG, sig); + _STOPEVENT(p, S_SIG, sig, "issignal"); /* * We should see pending but ignored signals @@ -1876,7 +1876,7 @@ ktrpsig(sig, action, p->p_flag & P_OLDMASK ? &p->p_oldsigmask : &p->p_sigmask, 0); #endif - _STOPEVENT(p, S_SIG, sig); + _STOPEVENT(p, S_SIG, sig, "postsig"); if (action == SIG_DFL) { /* @@ -2097,7 +2097,7 @@ off_t limit; PROC_LOCK(p); - _STOPEVENT(p, S_CORE, 0); + _STOPEVENT(p, S_CORE, 0, "coredump"); if (((sugid_coredump == 0) && p->p_flag & P_SUGID) || do_coredump == 0) { PROC_UNLOCK(p); Index: src/sys/kern/sys_process.c =================================================================== RCS file: /home/ncvs/src/sys/kern/sys_process.c,v retrieving revision 1.104 diff -u -r1.104 sys_process.c --- src/sys/kern/sys_process.c 16 Oct 2002 16:28:33 -0000 1.104 +++ src/sys/kern/sys_process.c 26 Nov 2002 10:51:32 -0000 @@ -740,7 +740,8 @@ * (cleared by PIOCCONT in procfs). */ void -stopevent(struct proc *p, unsigned int event, unsigned int val) +stopevent(struct proc *p, unsigned int event, unsigned int val, + const char *tag) { PROC_LOCK_ASSERT(p, MA_OWNED | MA_NOTRECURSED); @@ -750,6 +751,6 @@ p->p_xstat = val; p->p_stype = event; /* Which event caused the stop? */ wakeup(&p->p_stype); /* Wake up any PIOCWAIT'ing procs */ - msleep(&p->p_step, &p->p_mtx, PWAIT, "stopevent", 0); + msleep(&p->p_step, &p->p_mtx, PWAIT, tag, 0); } while (p->p_step); } Index: src/sys/powerpc/powerpc/trap.c =================================================================== RCS file: /home/ncvs/src/sys/powerpc/powerpc/trap.c,v retrieving revision 1.34 diff -u -r1.34 trap.c --- src/sys/powerpc/powerpc/trap.c 4 Oct 2002 01:19:18 -0000 1.34 +++ src/sys/powerpc/powerpc/trap.c 26 Nov 2002 10:51:33 -0000 @@ -417,7 +417,7 @@ td->td_retval[0] = 0; td->td_retval[1] = frame->fixreg[FIRSTARG + 1]; - STOPEVENT(p, S_SCE, narg); + STOPEVENT(p, S_SCE, narg, "syscall entry"); error = (*callp->sy_call)(td, params); } @@ -471,7 +471,7 @@ /* * Does the comment in the i386 code about errno apply here? */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "syscall exit"); #ifdef WITNESS if (witness_list(td)) { Index: src/sys/sparc64/sparc64/trap.c =================================================================== RCS file: /home/ncvs/src/sys/sparc64/sparc64/trap.c,v retrieving revision 1.51 diff -u -r1.51 trap.c --- src/sys/sparc64/sparc64/trap.c 26 Oct 2002 17:38:20 -0000 1.51 +++ src/sys/sparc64/sparc64/trap.c 26 Nov 2002 10:51:33 -0000 @@ -563,7 +563,7 @@ td->td_retval[0] = 0; td->td_retval[1] = 0; - STOPEVENT(p, S_SCE, narg); /* MP aware */ + STOPEVENT(p, S_SCE, narg, "syscall entry"); /* MP aware */ error = (*callp->sy_call)(td, argp); @@ -627,7 +627,7 @@ * register set. If we ever support an emulation where this * is not the case, this code will need to be revisited. */ - STOPEVENT(p, S_SCX, code); + STOPEVENT(p, S_SCX, code, "syscall exit"); #ifdef DIAGNOSTIC cred_free_thread(td); Index: src/sys/sys/proc.h =================================================================== RCS file: /home/ncvs/src/sys/sys/proc.h,v retrieving revision 1.283 diff -u -r1.283 proc.h --- src/sys/sys/proc.h 22 Nov 2002 23:57:01 -0000 1.283 +++ src/sys/sys/proc.h 26 Nov 2002 10:51:33 -0000 @@ -733,15 +733,15 @@ FREE(s, M_SESSION); \ } -#define STOPEVENT(p, e, v) do { \ +#define STOPEVENT(p, e, v, s) do { \ PROC_LOCK(p); \ - _STOPEVENT((p), (e), (v)); \ + _STOPEVENT((p), (e), (v), s); \ PROC_UNLOCK(p); \ } while (0) -#define _STOPEVENT(p, e, v) do { \ +#define _STOPEVENT(p, e, v, s) do { \ PROC_LOCK_ASSERT(p, MA_OWNED); \ if ((p)->p_stops & (e)) { \ - stopevent((p), (e), (v)); \ + stopevent((p), (e), (v), "stopevent (" s ")"); \ } \ } while (0) @@ -882,7 +882,7 @@ void setrunqueue(struct thread *); void setsugid(struct proc *p); void sleepinit(void); -void stopevent(struct proc *, u_int, u_int); +void stopevent(struct proc *, u_int, u_int, const char *); void cpu_idle(void); void cpu_switch(void); void cpu_throw(void) __dead2; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message