Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Nov 2013 08:49:54 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r258625 - in head/sys: cddl/compat/opensolaris/sys kern sys
Message-ID:  <201311260849.rAQ8nswK080676@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Tue Nov 26 08:49:53 2013
New Revision: 258625
URL: http://svnweb.freebsd.org/changeset/base/258625

Log:
  sdt: add support for solaris/illumos style DTRACE_PROBE macros
  
  The new macros are implemented in terms of SDT_PROBE_DEFINE and SDT_PROBE.
  Probes defined in this way will appear under SDT provider named "sdt".
  Parameter types are exposed via SDT_PROBE_ARGTYPE.
  This is something that illumos does not have by default.
  
  This kind of SDT probes is already present in ZFS code, so those probes
  will now be available if KDTRACE_HOOKS options is enabled.
  
  A potential future illumos compatibility enhancement is to encode a provider
  name as a prefix in a probe name.
  
  Reviewed by:	markj
  MFC after:	3 weeks
  X-MFC after:	r258622

Modified:
  head/sys/cddl/compat/opensolaris/sys/sdt.h
  head/sys/kern/kern_sdt.c
  head/sys/sys/sdt.h

Modified: head/sys/cddl/compat/opensolaris/sys/sdt.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/sdt.h	Tue Nov 26 08:48:09 2013	(r258624)
+++ head/sys/cddl/compat/opensolaris/sys/sdt.h	Tue Nov 26 08:49:53 2013	(r258625)
@@ -31,18 +31,6 @@
 
 #include_next <sys/sdt.h>
 
-#undef	DTRACE_PROBE
-#undef	DTRACE_PROBE1
-#undef	DTRACE_PROBE2
-#undef	DTRACE_PROBE3
-#undef	DTRACE_PROBE4
-
-#define	DTRACE_PROBE(name)
-#define	DTRACE_PROBE1(name, type1, arg1)
-#define	DTRACE_PROBE2(name, type1, arg1, type2, arg2)
-#define	DTRACE_PROBE3(name, type1, arg1, type2, arg2, type3, arg3)
-#define	DTRACE_PROBE4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4)
-
 #define	SET_ERROR(err)	(err)
 
 #endif	/* _OPENSOLARIS_SYS_SDT_H_ */

Modified: head/sys/kern/kern_sdt.c
==============================================================================
--- head/sys/kern/kern_sdt.c	Tue Nov 26 08:48:09 2013	(r258624)
+++ head/sys/kern/kern_sdt.c	Tue Nov 26 08:49:53 2013	(r258625)
@@ -29,6 +29,8 @@
 #include <sys/systm.h>
 #include <sys/sdt.h>
 
+SDT_PROVIDER_DEFINE(sdt);
+
 /*
  * Hook for the DTrace probe function. The SDT provider will set this to
  * dtrace_probe() when it loads.

Modified: head/sys/sys/sdt.h
==============================================================================
--- head/sys/sys/sdt.h	Tue Nov 26 08:48:09 2013	(r258624)
+++ head/sys/sys/sdt.h	Tue Nov 26 08:49:53 2013	(r258625)
@@ -126,6 +126,14 @@
     arg1, xarg1, arg2, xarg2, arg3, xarg3, arg4, xarg4, arg5, xarg5, arg6,     \
     xarg6)
 
+#define	DTRACE_PROBE(name)
+#define	DTRACE_PROBE1(name, type0, arg0)
+#define	DTRACE_PROBE2(name, type0, arg0, type1, arg1)
+#define	DTRACE_PROBE3(name, type0, arg0, type1, arg1, type2, arg2)
+#define	DTRACE_PROBE4(name, type0, arg0, type1, arg1, type2, arg2, type3, arg3)
+#define	DTRACE_PROBE5(name, type0, arg0, type1, arg1, type2, arg2, type3, arg3,\
+    type4, arg4)
+
 #else
 
 SET_DECLARE(sdt_providers_set, struct sdt_provider);
@@ -313,6 +321,51 @@ SET_DECLARE(sdt_argtypes_set, struct sdt
 			    (uintptr_t)arg6);				       \
 	} while (0)
 
+#define	DTRACE_PROBE_IMPL_START(name, arg0, arg1, arg2, arg3, arg4)	do { \
+	static SDT_PROBE_DEFINE(sdt, , , name);				     \
+	SDT_PROBE(sdt, , , name, arg0, arg1, arg2, arg3, arg4);
+#define DTRACE_PROBE_IMPL_END	} while (0)
+
+#define DTRACE_PROBE(name)						\
+	DTRACE_PROBE_IMPL_START(name, 0, 0, 0, 0, 0)			\
+	DTRACE_PROBE_IMPL_END
+
+#define DTRACE_PROBE1(name, type0, arg0)				\
+	DTRACE_PROBE_IMPL_START(name, arg0, 0, 0, 0, 0) 		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 0, #type0, NULL);		\
+	DTRACE_PROBE_IMPL_END
+
+#define DTRACE_PROBE2(name, type0, arg0, type1, arg1)			\
+	DTRACE_PROBE_IMPL_START(name, arg0, arg1, 0, 0, 0) 		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 0, #type0, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 1, #type1, NULL);		\
+	DTRACE_PROBE_IMPL_END
+
+#define DTRACE_PROBE3(name, type0, arg0, type1, arg1, type2, arg2)	\
+	DTRACE_PROBE_IMPL_START(name, arg0, arg1, arg2, 0, 0)	 	\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 0, #type0, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 1, #type1, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 2, #type2, NULL);		\
+	DTRACE_PROBE_IMPL_END
+
+#define DTRACE_PROBE4(name, type0, arg0, type1, arg1, type2, arg2, type3, arg3)	\
+	DTRACE_PROBE_IMPL_START(name, arg0, arg1, arg2, arg3, 0) 	\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 0, #type0, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 1, #type1, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 2, #type2, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 3, #type3, NULL);		\
+	DTRACE_PROBE_IMPL_END
+
+#define DTRACE_PROBE5(name, type0, arg0, type1, arg1, type2, arg2, type3, arg3,	\
+    type4, arg4)								\
+	DTRACE_PROBE_IMPL_START(name, arg0, arg1, arg2, arg3, arg4) 	\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 0, #type0, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 1, #type1, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 2, #type2, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 3, #type3, NULL);		\
+	SDT_PROBE_ARGTYPE(sdt, , , name, 4, #type4, NULL);		\
+	DTRACE_PROBE_IMPL_END
+
 #endif /* KDTRACE_HOOKS */
 
 /*
@@ -365,6 +418,8 @@ struct sdt_provider {
 void sdt_probe_stub(uint32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t,
     uintptr_t);
 
+SDT_PROVIDER_DECLARE(sdt);
+
 #endif /* _KERNEL */
 
 #endif /* _SYS_SDT_H */



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