Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Nov 2007 03:32:10 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 128606 for review
Message-ID:  <200711040332.lA43WAIf027920@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=128606

Change 128606 by jb@jb_freebsd1 on 2007/11/04 03:31:54

	Revise the extra memory allocation for DTrace struct proc and
	struct thread data based on advice from rwatson and jhb that
	adding an extra pointer to struct proc and struct thread won't
	break the kernel ABI.
	
	This adds event handlers to allocate and free proc/thread
	data for DTrace plus a memory allocation type for DTrace
	hooks.
	
	Note that adding the event handler definitions to proc.h tended
	to expose all the event handler junk everywhere in the kernel
	that references proc.h. It turned out to be cleaner to add 
	proc_event.h and just include that where _really_ needed.

Affected files ...

.. //depot/projects/dtrace/src/sys/conf/files#49 edit
.. //depot/projects/dtrace/src/sys/kern/init_main.c#19 edit
.. //depot/projects/dtrace/src/sys/kern/kern_dtrace.c#1 add
.. //depot/projects/dtrace/src/sys/kern/kern_thread.c#14 edit
.. //depot/projects/dtrace/src/sys/sys/dtrace_bsd.h#2 edit
.. //depot/projects/dtrace/src/sys/sys/proc.h#24 edit
.. //depot/projects/dtrace/src/sys/sys/proc_event.h#1 add

Differences ...

==== //depot/projects/dtrace/src/sys/conf/files#49 (text+ko) ====

@@ -1416,6 +1416,7 @@
 kern/kern_cpu.c			standard
 kern/kern_context.c		standard
 kern/kern_descrip.c		standard
+kern/kern_dtrace.c		standard
 kern/kern_environment.c		standard
 kern/kern_event.c		standard
 kern/kern_exec.c		standard

==== //depot/projects/dtrace/src/sys/kern/init_main.c#19 (text+ko) ====

@@ -98,15 +98,6 @@
 struct	vmspace vmspace0;
 struct	proc *initproc;
 
-/* DTrace data for the primary thread in proc0. */
-char	kdtrace_thread0[KDTRACE_THREAD_SIZE];
-
-/* Offset from 'struct thread *' to the opaque DTrace fields. */
-int	kdtrace_thread_offset;
-
-/* Overall per-thread allocation size. */
-int	kdtrace_thread_size;
-
 int	boothowto = 0;		/* initialized so that it can be patched */
 SYSCTL_INT(_debug, OID_AUTO, boothowto, CTLFLAG_RD, &boothowto, 0, "");
 int	bootverbose;
@@ -186,18 +177,6 @@
 	int verbose;
 #endif
 
-	/* Get the size of 'struct thread' plus 'struct td_sched' */
-	kdtrace_thread_offset = sched_sizeof_thread();
-
-	/*
-	 * Allow for the DTrace-specific thread data after
-	 * struct td_sched. This space is allocated opaquely to
-	 * avoid license issues. The value of KDTRACE_THREAD_SIZE
-	 * set in sys/proc.h must be larger than that required by
-	 * the DTrace kernel modules.
-	 */
-	kdtrace_thread_size = kdtrace_thread_offset + KDTRACE_THREAD_SIZE;
-
 	if (sysinit == NULL) {
 		sysinit = SET_BEGIN(sysinit_set);
 		sysinit_end = SET_LIMIT(sysinit_set);

==== //depot/projects/dtrace/src/sys/kern/kern_thread.c#14 (text+ko) ====

@@ -35,6 +35,7 @@
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
+#include <sys/proc_event.h>
 #include <sys/resourcevar.h>
 #include <sys/smp.h>
 #include <sys/sysctl.h>
@@ -186,6 +187,7 @@
 	td->td_sleepqueue = sleepq_alloc();
 	td->td_turnstile = turnstile_alloc();
 	td->td_sched = (struct td_sched *)&td[1];
+	EVENTHANDLER_INVOKE(thread_ctor, td);
 	sched_newthread(td);
 	umtx_thread_init(td);
 	return (0);
@@ -200,6 +202,7 @@
 	struct thread *td;
 
 	td = (struct thread *)mem;
+	EVENTHANDLER_INVOKE(thread_dtor, td);
 	turnstile_free(td->td_turnstile);
 	sleepq_free(td->td_sleepqueue);
 	umtx_thread_fini(td);
@@ -243,7 +246,7 @@
 	mtx_init(&tid_lock, "TID lock", NULL, MTX_DEF);
 	tid_unrhdr = new_unrhdr(PID_MAX + 1, INT_MAX, &tid_lock);
 
-	thread_zone = uma_zcreate("THREAD", kdtrace_thread_size,
+	thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(),
 	    thread_ctor, thread_dtor, thread_init, thread_fini,
 	    16 - 1, 0);
 #ifdef KSE

==== //depot/projects/dtrace/src/sys/sys/dtrace_bsd.h#2 (text+ko) ====

@@ -37,4 +37,12 @@
 /* Global variable in trap.c */
 extern	dtrace_invop_func_t	dtrace_invop_func;
 
+/*
+ * Functions which allow the dtrace module to check that the kernel 
+ * hooks have been compiled with sufficient space for it's private
+ * structures.
+ */
+size_t	kdtrace_proc_size(void);
+size_t	kdtrace_thread_size(void);
+
 #endif /* _SYS_DTRACE_BSD_H */

==== //depot/projects/dtrace/src/sys/sys/proc.h#24 (text+ko) ====

@@ -163,6 +163,8 @@
 struct trapframe;
 struct turnstile;
 struct mqueue_notifier;
+struct kdtrace_proc;
+struct kdtrace_thread;
 
 /*
  * Here we define the two structures used for process information.
@@ -298,6 +300,7 @@
 	struct td_sched	*td_sched;	/* (*) Scheduler-specific data. */
 	struct kaudit_record	*td_ar;	/* (k) Active audit record, if any. */
 	int		td_syscalls;	/* per-thread syscall count (used by NFS :)) */
+	struct kdtrace_thread	*td_dtrace; /* (*) DTrace-specific data. */
 };
 
 struct mtx *thread_lock_block(struct thread *);
@@ -587,6 +590,7 @@
 	struct p_sched	*p_sched;	/* (*) Scheduler-specific data. */
 	STAILQ_HEAD(, ktr_request)	p_ktr;	/* (o) KTR event queue. */
 	LIST_HEAD(, mqueue_notifier)	p_mqnotifier; /* (c) mqueue notifiers.*/
+	struct kdtrace_proc	*p_dtrace; /* (*) DTrace-specific data. */
 };
 
 #define	p_session	p_pgrp->pg_session
@@ -804,21 +808,6 @@
 extern int maxprocperuid;		/* Max procs per uid. */
 extern u_long ps_arg_cache_limit;
 
-/*
- * Space to append to struct thread for DTrace specific thread
- * variables. This space is after the 'struct td_sched'.
- */
-#define KDTRACE_THREAD_SIZE 128
-
-/* Offset from 'struct thread *' to the opaque DTrace fields. */
-extern int kdtrace_thread_offset;
-
-/* Overall per-thread allocation size. */
-extern int kdtrace_thread_size;
-
-/* DTrace data for the primary thread in proc0. */
-extern char kdtrace_thread0[];
-
 LIST_HEAD(proclist, proc);
 TAILQ_HEAD(procqueue, proc);
 TAILQ_HEAD(threadqueue, thread);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711040332.lA43WAIf027920>