svn commit: r285004 - head/sys/cddl/dev/fbt
Ruslan Bukin
br at FreeBSD.org
Wed Jul 1 14:10:00 UTC 2015
Author: br
Date: Wed Jul 1 14:09:59 2015
New Revision: 285004
URL: https://svnweb.freebsd.org/changeset/base/285004
Log:
Add a central location for exclusion checks. We check
here if function is excluded from FBT instrumentation.
Reviewed by: andrew, emaste, markj
Differential Revision: https://reviews.freebsd.org/D2899
Modified:
head/sys/cddl/dev/fbt/fbt.c
head/sys/cddl/dev/fbt/fbt.h
Modified: head/sys/cddl/dev/fbt/fbt.c
==============================================================================
--- head/sys/cddl/dev/fbt/fbt.c Wed Jul 1 13:59:26 2015 (r285003)
+++ head/sys/cddl/dev/fbt/fbt.c Wed Jul 1 14:09:59 2015 (r285004)
@@ -111,6 +111,37 @@ static struct cdev *fbt_cdev;
static int fbt_probetab_size;
static int fbt_verbose = 0;
+int
+fbt_excluded(const char *name)
+{
+
+ if (strncmp(name, "dtrace_", 7) == 0 &&
+ strncmp(name, "dtrace_safe_", 12) != 0) {
+ /*
+ * Anything beginning with "dtrace_" may be called
+ * from probe context unless it explicitly indicates
+ * that it won't be called from probe context by
+ * using the prefix "dtrace_safe_".
+ */
+ return (1);
+ }
+
+ /* Exclude some internal functions */
+ if (name[0] == '_' && name[1] == '_')
+ return (1);
+
+ /*
+ * When DTrace is built into the kernel we need to exclude
+ * the FBT functions from instrumentation.
+ */
+#ifndef _KLD_MODULE
+ if (strncmp(name, "fbt_", 4) == 0)
+ return (1);
+#endif
+
+ return (0);
+}
+
static void
fbt_doubletrap(void)
{
Modified: head/sys/cddl/dev/fbt/fbt.h
==============================================================================
--- head/sys/cddl/dev/fbt/fbt.h Wed Jul 1 13:59:26 2015 (r285003)
+++ head/sys/cddl/dev/fbt/fbt.h Wed Jul 1 14:09:59 2015 (r285004)
@@ -58,6 +58,7 @@ int fbt_invop(uintptr_t, uintptr_t *, ui
void fbt_patch_tracepoint(fbt_probe_t *, fbt_patchval_t);
int fbt_provide_module_function(struct linker_file *, int,
struct linker_symval *, void *);
+int fbt_excluded(const char *name);
extern dtrace_provider_id_t fbt_id;
extern fbt_probe_t **fbt_probetab;
More information about the svn-src-head
mailing list