Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F164835224
D27311.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D27311.diff
View Options
Index: head/sys/kern/init_main.c
===================================================================
--- head/sys/kern/init_main.c
+++ head/sys/kern/init_main.c
@@ -65,6 +65,7 @@
#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 @@
*/
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);
Index: head/sys/kern/kern_dtrace.c
===================================================================
--- head/sys/kern/kern_dtrace.c
+++ head/sys/kern/kern_dtrace.c
@@ -67,21 +67,19 @@
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 @@
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);
Index: head/sys/kern/kern_proc.c
===================================================================
--- head/sys/kern/kern_proc.c
+++ head/sys/kern/kern_proc.c
@@ -65,6 +65,7 @@
#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 @@
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 @@
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"));
}
Index: head/sys/kern/kern_thread.c
===================================================================
--- head/sys/kern/kern_thread.c
+++ head/sys/kern/kern_thread.c
@@ -50,6 +50,7 @@
#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 @@
#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 @@
#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);
Index: head/sys/sys/dtrace_bsd.h
===================================================================
--- head/sys/sys/dtrace_bsd.h
+++ head/sys/sys/dtrace_bsd.h
@@ -165,6 +165,11 @@
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.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 5, 6:32 AM (10 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36007105
Default Alt Text
D27311.diff (4 KB)
Attached To
Mode
D27311: dtrace: stop using eventhandlers for the part compiled into the kernel
Attached
Detach File
Event Timeline
Log In to Comment