svn commit: r234691 - in head: cddl/contrib/opensolaris/lib/libdtrace/common sys/cddl/contrib/opensolaris/uts/common/dtrace sys/cddl/contrib/opensolaris/uts/common/sys

[ Available lists | Index of svn-src-head | Month of Apr 2012 | Week of 26 Apr 2012 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Ryan Stone <rstone@FreeBSD.org>
Date
26 Apr 2012 01:07:04
Subject
svn commit: r234691 - in head: cddl/contrib/opensolaris/lib/libdtrace/common sys/cddl/contrib/opensolaris/uts/common/dtrace sys/cddl/contrib/opensolaris/uts/common/sys
Message-ID
201204260107.q3Q174k2023007@svn.freebsd.org


[ Hide this part ]
Author: rstone
Date: Thu Apr 26 01:07:03 2012
New Revision: 234691
URL: http://svn.freebsd.org/changeset/base/234691

Log:
Implement the D "cpu" variable, which returns curcpu. I have chosen not
to follow the example of OpenSolaris and its descendants, which implemented
cpu as an inline that took a value out of curthread. At certain points in
the FreeBSD scheduler curthread->td_oncpu will no longer be valid (in
particukar, just before the thread gets descheduled) so instead I have
implemented this as its own built-in variable.

Sponsored by: Sandvine Inc.
MFC after: 1 week

Modified:
head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
head/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h

Modified: head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c Thu Apr 26 00:51:43 2012 (r234690)
+++ head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c Thu Apr 26 01:07:03 2012 (r234691)
@@ -497,6 +497,12 @@ static const dt_ident_t _dtrace_globals[
{ "zonename", DT_IDENT_SCALAR, 0, DIF_VAR_ZONENAME,
DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_type, "string" },
#endif
+
+#if !defined(sun)
+{ "cpu", DT_IDENT_SCALAR, 0, DIF_VAR_CPU,
+ DT_ATTR_STABCMN, DT_VERS_1_6_3, &dt_idops_type, "int" },
+#endif
+
{ NULL, 0, 0, 0, { 0, 0, 0 }, 0, NULL, NULL }
};


Modified: head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c Thu Apr 26 00:51:43 2012 (r234690)
+++ head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c Thu Apr 26 01:07:03 2012 (r234691)
@@ -3143,6 +3143,11 @@ dtrace_dif_variable(dtrace_mstate_t *mst
return (curthread->td_errno);
#endif
}
+#if !defined(sun)
+ case DIF_VAR_CPU: {
+ return curcpu;
+ }
+#endif
default:
DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP);
return (0);

Modified: head/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h Thu Apr 26 00:51:43 2012 (r234690)
+++ head/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h Thu Apr 26 01:07:03 2012 (r234691)
@@ -251,6 +251,10 @@ typedef enum dtrace_probespec {
#define DIF_VAR_ERRNO 0x0120 /* thread errno */
#define DIF_VAR_EXECARGS 0x0121 /* process arguments */

+#if !defined(sun)
+#define DIF_VAR_CPU 0x0200
+#endif
+
#define DIF_SUBR_RAND 0
#define DIF_SUBR_MUTEX_OWNED 1
#define DIF_SUBR_MUTEX_OWNER 2

Elapsed time: 0.221 seconds