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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to