svn commit: r367962 - in head/sys: kern sys

Mateusz Guzik mjg at FreeBSD.org
Mon Nov 23 18:27:23 UTC 2020


Author: mjg
Date: Mon Nov 23 18:27:21 2020
New Revision: 367962
URL: https://svnweb.freebsd.org/changeset/base/367962

Log:
  dtrace: stop using eventhandlers for the part compiled into the kernel
  
  Reviewed by:	kib, markj
  Differential Revision:	https://reviews.freebsd.org/D27311

Modified:
  head/sys/kern/init_main.c
  head/sys/kern/kern_dtrace.c
  head/sys/kern/kern_proc.c
  head/sys/kern/kern_thread.c
  head/sys/sys/dtrace_bsd.h

Modified: head/sys/kern/init_main.c
==============================================================================
--- head/sys/kern/init_main.c	Mon Nov 23 18:26:47 2020	(r367961)
+++ head/sys/kern/init_main.c	Mon Nov 23 18:27:21 2020	(r367962)
@@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/loginclass.h>
 #include <sys/mount.h>
 #include <sys/mutex.h>
+#include <sys/dtrace_bsd.h>
 #include <sys/syscallsubr.h>
 #include <sys/sysctl.h>
 #include <sys/proc.h>
@@ -607,6 +608,10 @@ proc0_init(void *dummy __unused)
 	 */
 	EVENTHANDLER_DIRECT_INVOKE(process_init, p);
 	EVENTHANDLER_DIRECT_INVOKE(thread_init, td);
+#ifdef KDTRACE_HOOKS
+	kdtrace_proc_ctor(p);
+	kdtrace_thread_ctor(td);
+#endif
 	EVENTHANDLER_DIRECT_INVOKE(process_ctor, p);
 	EVENTHANDLER_DIRECT_INVOKE(thread_ctor, td);
 

Modified: head/sys/kern/kern_dtrace.c
==============================================================================
--- head/sys/kern/kern_dtrace.c	Mon Nov 23 18:26:47 2020	(r367961)
+++ head/sys/kern/kern_dtrace.c	Mon Nov 23 18:27:21 2020	(r367962)
@@ -67,21 +67,19 @@ kdtrace_proc_size()
 	return (KDTRACE_PROC_SIZE);
 }
 
-static void
-kdtrace_proc_ctor(void *arg __unused, struct proc *p)
+void
+kdtrace_proc_ctor(struct proc *p)
 {
 
 	p->p_dtrace = malloc(KDTRACE_PROC_SIZE, M_KDTRACE, M_WAITOK|M_ZERO);
 }
 
-static void
-kdtrace_proc_dtor(void *arg __unused, struct proc *p)
+void
+kdtrace_proc_dtor(struct proc *p)
 {
 
-	if (p->p_dtrace != NULL) {
-		free(p->p_dtrace, M_KDTRACE);
-		p->p_dtrace = NULL;
-	}
+	free(p->p_dtrace, M_KDTRACE);
+	p->p_dtrace = NULL;
 }
 
 /* Return the DTrace thread data size compiled in the kernel hooks. */
@@ -92,38 +90,17 @@ kdtrace_thread_size()
 	return (KDTRACE_THREAD_SIZE);
 }
 
-static void
-kdtrace_thread_ctor(void *arg __unused, struct thread *td)
+void
+kdtrace_thread_ctor(struct thread *td)
 {
 
 	td->td_dtrace = malloc(KDTRACE_THREAD_SIZE, M_KDTRACE, M_WAITOK|M_ZERO);
 }
 
-static void
-kdtrace_thread_dtor(void *arg __unused, struct thread *td)
+void
+kdtrace_thread_dtor(struct thread *td)
 {
 
-	if (td->td_dtrace != NULL) {
-		free(td->td_dtrace, M_KDTRACE);
-		td->td_dtrace = NULL;
-	}
+	free(td->td_dtrace, M_KDTRACE);
+	td->td_dtrace = NULL;
 }
-
-/*
- *  Initialise the kernel DTrace hooks.
- */
-static void
-init_dtrace(void *dummy __unused)
-{
-
-	EVENTHANDLER_REGISTER(process_ctor, kdtrace_proc_ctor, NULL,
-	    EVENTHANDLER_PRI_ANY);
-	EVENTHANDLER_REGISTER(process_dtor, kdtrace_proc_dtor, NULL,
-	    EVENTHANDLER_PRI_ANY);
-	EVENTHANDLER_REGISTER(thread_ctor, kdtrace_thread_ctor, NULL,
-	    EVENTHANDLER_PRI_ANY);
-	EVENTHANDLER_REGISTER(thread_dtor, kdtrace_thread_dtor, NULL,
-	    EVENTHANDLER_PRI_ANY);
-}
-
-SYSINIT(kdtrace, SI_SUB_KDTRACE, SI_ORDER_FIRST, init_dtrace, NULL);

Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c	Mon Nov 23 18:26:47 2020	(r367961)
+++ head/sys/kern/kern_proc.c	Mon Nov 23 18:27:21 2020	(r367962)
@@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/smp.h>
 #include <sys/stack.h>
 #include <sys/stat.h>
+#include <sys/dtrace_bsd.h>
 #include <sys/sysctl.h>
 #include <sys/filedesc.h>
 #include <sys/tty.h>
@@ -207,6 +208,9 @@ proc_ctor(void *mem, int size, void *arg, int flags)
 	struct thread *td;
 
 	p = (struct proc *)mem;
+#ifdef KDTRACE_HOOKS
+	kdtrace_proc_ctor(p);
+#endif
 	EVENTHANDLER_DIRECT_INVOKE(process_ctor, p);
 	td = FIRST_THREAD_IN_PROC(p);
 	if (td != NULL) {
@@ -243,6 +247,9 @@ proc_dtor(void *mem, int size, void *arg)
 		EVENTHANDLER_DIRECT_INVOKE(thread_dtor, td);
 	}
 	EVENTHANDLER_DIRECT_INVOKE(process_dtor, p);
+#ifdef KDTRACE_HOOKS
+	kdtrace_proc_dtor(p);
+#endif
 	if (p->p_ksi != NULL)
 		KASSERT(! KSI_ONQ(p->p_ksi), ("SIGCHLD queue"));
 }

Modified: head/sys/kern/kern_thread.c
==============================================================================
--- head/sys/kern/kern_thread.c	Mon Nov 23 18:26:47 2020	(r367961)
+++ head/sys/kern/kern_thread.c	Mon Nov 23 18:27:21 2020	(r367962)
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/sleepqueue.h>
 #include <sys/selinfo.h>
 #include <sys/syscallsubr.h>
+#include <sys/dtrace_bsd.h>
 #include <sys/sysent.h>
 #include <sys/turnstile.h>
 #include <sys/taskqueue.h>
@@ -358,6 +359,9 @@ thread_ctor(void *mem, int size, void *arg, int flags)
 #ifdef AUDIT
 	audit_thread_alloc(td);
 #endif
+#ifdef KDTRACE_HOOKS
+	kdtrace_thread_ctor(td);
+#endif
 	umtx_thread_alloc(td);
 	MPASS(td->td_sel == NULL);
 	return (0);
@@ -395,6 +399,9 @@ thread_dtor(void *mem, int size, void *arg)
 #endif
 #ifdef AUDIT
 	audit_thread_free(td);
+#endif
+#ifdef KDTRACE_HOOKS
+	kdtrace_thread_dtor(td);
 #endif
 	/* Free all OSD associated to this thread. */
 	osd_thread_exit(td);

Modified: head/sys/sys/dtrace_bsd.h
==============================================================================
--- head/sys/sys/dtrace_bsd.h	Mon Nov 23 18:26:47 2020	(r367961)
+++ head/sys/sys/dtrace_bsd.h	Mon Nov 23 18:27:21 2020	(r367962)
@@ -165,6 +165,11 @@ extern dtrace_nfsclient_nfs23_done_probe_func_t
 size_t	kdtrace_proc_size(void);
 size_t	kdtrace_thread_size(void);
 
+void	kdtrace_proc_ctor(struct proc *p);
+void	kdtrace_proc_dtor(struct proc *p);
+void	kdtrace_thread_ctor(struct thread *td);
+void	kdtrace_thread_dtor(struct thread *td);
+
 /*
  * OpenSolaris compatible time functions returning nanoseconds.
  * On OpenSolaris these return hrtime_t which we define as uint64_t.


More information about the svn-src-head mailing list