diff options
author | jb <jb@FreeBSD.org> | 2008-05-24 06:22:16 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 2008-05-24 06:22:16 +0000 |
commit | c4443570b616a998fb115e9ea8e02aaa8291c538 (patch) | |
tree | 5d1a1433c24202dd7d4681d388f6df0788664c25 /sys/kern/kern_fork.c | |
parent | e0c188cb54d2e72e7d003f16765a9c3dd9495e8e (diff) | |
download | FreeBSD-src-c4443570b616a998fb115e9ea8e02aaa8291c538.zip FreeBSD-src-c4443570b616a998fb115e9ea8e02aaa8291c538.tar.gz |
Add DTrace 'proc' provider probes using the Statically Defined Trace
(sdt) mechanism.
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r-- | sys/kern/kern_fork.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 7dc42f4..8387532 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -37,6 +37,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_kdtrace.h" #include "opt_ktrace.h" #include "opt_mac.h" @@ -63,6 +64,7 @@ __FBSDID("$FreeBSD$"); #include <sys/ktr.h> #include <sys/ktrace.h> #include <sys/unistd.h> +#include <sys/sdt.h> #include <sys/sx.h> #include <sys/signalvar.h> @@ -75,6 +77,16 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_extern.h> #include <vm/uma.h> +#ifdef KDTRACE_HOOKS +#include <sys/dtrace_bsd.h> +dtrace_fork_func_t dtrace_fasttrap_fork; +#endif + +SDT_PROVIDER_DECLARE(proc); +SDT_PROBE_DEFINE(proc, kernel, , create); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 0, "struct proc *"); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 1, "struct proc *"); +SDT_PROBE_ARGTYPE(proc, kernel, , create, 2, "int"); #ifndef _SYS_SYSPROTO_H_ struct fork_args { @@ -626,6 +638,15 @@ again: p2->p_pfsflags = p1->p_pfsflags; } +#ifdef KDTRACE_HOOKS + /* + * Tell the DTrace fasttrap provider about the new process + * if it has registered an interest. + */ + if (dtrace_fasttrap_fork) + dtrace_fasttrap_fork(p1, p2); +#endif + /* * This begins the section where we must prevent the parent * from being swapped. @@ -715,6 +736,8 @@ again: PROC_UNLOCK(p1); + SDT_PROBE(proc, kernel, , create, p2, p1, flags, 0, 0); + /* * Preserve synchronization semantics of vfork. If waiting for * child to exec or exit, set P_PPWAIT on child, and sleep on our |