From owner-p4-projects@FreeBSD.ORG Wed Jun 7 00:25:00 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A0F4216B9BA; Wed, 7 Jun 2006 00:06:23 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4435616D335 for ; Tue, 6 Jun 2006 23:32:37 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1109343D6D for ; Tue, 6 Jun 2006 23:32:34 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k56NUi28042729 for ; Tue, 6 Jun 2006 23:30:44 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k56NUiSJ042723 for perforce@freebsd.org; Tue, 6 Jun 2006 23:30:44 GMT (envelope-from jb@freebsd.org) Date: Tue, 6 Jun 2006 23:30:44 GMT Message-Id: <200606062330.k56NUiSJ042723@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 98707 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Jun 2006 00:25:01 -0000 http://perforce.freebsd.org/chv.cgi?CH=98707 Change 98707 by jb@jb_freebsd2 on 2006/06/06 23:29:58 Add a function for DTrace to get the uptime in it's high resolution format (nanoseconds) without calling any other functions (which would violate the probe context call rules). Note that this only works on Pentium processors and above where the TSC is being used. It doesn't address any issues with TSC differences between processors. So there is more work required here. rdtsc() is an inline function so it doesn't violate the probe context rules. Affected files ... .. //depot/projects/dtrace/src/sys/i386/i386/tsc.c#2 edit Differences ... ==== //depot/projects/dtrace/src/sys/i386/i386/tsc.c#2 (text+ko) ==== @@ -28,6 +28,7 @@ __FBSDID("$FreeBSD: src/sys/i386/i386/tsc.c,v 1.205 2006/02/11 09:33:06 phk Exp $"); #include "opt_clock.h" +#include "opt_kdtrace.h" #include #include @@ -153,3 +154,18 @@ { return (rdtsc()); } + +/* + * DTrace needs a high resolution time function which can + * be called from a probe context and guaranteed not to have + * instrumented with probes itself. + * + * Returns nanoseconds since boot. + */ +#ifdef KDTRACE +uint64_t +dtrace_gethrtime() +{ + return (rdtsc() * (uint64_t) 1000000000 / tsc_freq); +} +#endif