PERFORCE change 132593 for review
John Birrell
jb at FreeBSD.org
Sat Jan 5 14:41:16 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132593
Change 132593 by jb at jb_freebsd1 on 2008/01/05 22:41:03
Rough update to the current design. It compiles and links.
WIP.
Affected files ...
.. //depot/projects/dtrace/src/sys/cddl/dev/fbt/fbt.c#5 edit
Differences ...
==== //depot/projects/dtrace/src/sys/cddl/dev/fbt/fbt.c#5 (text+ko) ====
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Portions Copyright 2006 John Birrell jb at freebsd.org
+ * Portions Copyright 2006-2008 John Birrell jb at freebsd.org
*
* $FreeBSD$
*
@@ -32,7 +32,6 @@
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/cpuvar.h>
#include <sys/fcntl.h>
@@ -60,7 +59,7 @@
#include <sys/unistd.h>
#include <machine/stdarg.h>
-#include <contrib/opensolaris/uts/common/sys/dtrace_impl.h>
+#include <sys/dtrace.h>
MALLOC_DECLARE(M_FBT);
MALLOC_DEFINE(M_FBT, "fbt", "Function Boundary Tracing");
@@ -168,7 +167,7 @@
static int
fbt_invop(uintptr_t addr, uintptr_t *stack, uintptr_t rval)
{
- struct pcpu *cpu = pcpu_find(curcpu);
+ solaris_cpu_t *cpu = &solaris_cpu[curcpu];
uintptr_t stack0, stack1, stack2, stack3, stack4;
fbt_probe_t *fbt = fbt_probetab[FBT_ADDR2NDX(addr)];
@@ -185,7 +184,7 @@
* disabled.
*/
DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
- cpu->pc_dtrace_caller = stack[i++];
+ cpu->cpu_dtrace_caller = stack[i++];
stack0 = stack[i++];
stack1 = stack[i++];
stack2 = stack[i++];
@@ -197,11 +196,11 @@
dtrace_probe(fbt->fbtp_id, stack0, stack1,
stack2, stack3, stack4);
- cpu->pc_dtrace_caller = 0;
+ cpu->cpu_dtrace_caller = 0;
} else {
dtrace_probe(fbt->fbtp_id, fbt->fbtp_roffset,
rval, 0, 0, 0);
- cpu->pc_dtrace_caller = 0;
+ cpu->cpu_dtrace_caller = 0;
}
return (fbt->fbtp_rval);
@@ -232,6 +231,7 @@
return (0);
}
+#ifdef DOODAD
/*
* Still trying to narrow down why some of these things are
* being called from the probe context. At the moment I suspect
@@ -269,6 +269,7 @@
strncmp(name, "spinlock", 8) == 0 ||
strcmp(name, "pcpu_find") == 0) /* used in stack() impl */
return (0);
+#endif
/*
* These filters are set by sysctl to help debugging the initial
@@ -595,6 +596,10 @@
static void
fbt_load(void *dummy)
{
+ /* Create the /dev/dtrace/fbt entry. */
+ fbt_cdev = make_dev(&fbt_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
+ "dtrace/fbt");
+
/* Default the probe table size if not specified. */
if (fbt_probetab_size == 0)
fbt_probetab_size = FBT_PROBETAB_SIZE;
@@ -644,13 +649,9 @@
switch (type) {
case MOD_LOAD:
- /* Create the /dev/dtrace/fbt entry. */
- fbt_cdev = make_dev(&fbt_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
- "dtrace/fbt");
break;
case MOD_UNLOAD:
- error = fbt_unload();
break;
case MOD_SHUTDOWN:
@@ -672,8 +673,10 @@
return (0);
}
-SYSINIT(fbt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_load, NULL)
+SYSINIT(fbt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_load, NULL);
+SYSUNINIT(fbt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_unload, NULL);
DEV_MODULE(fbt, fbt_modevent, NULL);
MODULE_VERSION(fbt, 1);
MODULE_DEPEND(fbt, dtrace, 1, 1, 1);
+MODULE_DEPEND(fbt, opensolaris, 1, 1, 1);
More information about the p4-projects
mailing list