From owner-svn-src-projects@FreeBSD.ORG Fri Dec 14 00:13:30 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6EA0BE8B; Fri, 14 Dec 2012 00:13:30 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 535508FC13; Fri, 14 Dec 2012 00:13:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBE0DUOX044637; Fri, 14 Dec 2012 00:13:30 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBE0DTLA044633; Fri, 14 Dec 2012 00:13:29 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201212140013.qBE0DTLA044633@svn.freebsd.org> From: Alexander Motin Date: Fri, 14 Dec 2012 00:13:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244199 - in projects/calloutng/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Dec 2012 00:13:30 -0000 Author: mav Date: Fri Dec 14 00:13:29 2012 New Revision: 244199 URL: http://svnweb.freebsd.org/changeset/base/244199 Log: - Extend precision range. - Fix sysctl name. Modified: projects/calloutng/sys/kern/kern_tc.c projects/calloutng/sys/kern/kern_timeout.c projects/calloutng/sys/sys/callout.h Modified: projects/calloutng/sys/kern/kern_tc.c ============================================================================== --- projects/calloutng/sys/kern/kern_tc.c Thu Dec 13 23:32:47 2012 (r244198) +++ projects/calloutng/sys/kern/kern_tc.c Fri Dec 14 00:13:29 2012 (r244199) @@ -22,6 +22,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #ifdef FFCLOCK #include #include @@ -124,13 +125,13 @@ struct bintime halftick_bt; struct bintime tick_bt; int tc_timeexp; int tc_timepercentage = TC_DEFAULTPERC; -TUNABLE_INT("kern.timecounter.allowdeviation", &tc_timepercentage); +TUNABLE_INT("kern.timecounter.alloweddeviation", &tc_timepercentage); int tc_timethreshold; static int sysctl_kern_timecounter_adjprecision(SYSCTL_HANDLER_ARGS); -SYSCTL_PROC(_kern_timecounter, OID_AUTO, tc_timepercentage, +SYSCTL_PROC(_kern_timecounter, OID_AUTO, alloweddeviation, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, 0, 0, - sysctl_kern_timecounter_adjprecision, "I", - "Allowed deviation from absolute value"); + sysctl_kern_timecounter_adjprecision, "I", + "Allowed time interval deviation in percents"); static void tc_windup(void); static void cpu_tick_calibrate(int); @@ -1722,11 +1723,18 @@ static void __inline tc_adjprecision(void) { struct timespec ts; - int tick_rate; + int tick_rate, t; tick_rate = hz / tc_tick; - tc_timethreshold = (1000000000 / (tick_rate * tc_timepercentage)) * 100; - tc_timeexp = fls(roundup2(100 / tc_timepercentage, 2)); + if (tc_timepercentage > 0) { + tc_timethreshold = + (1000000000 / (tick_rate * tc_timepercentage)) * 100; + t = (99 + tc_timepercentage) / tc_timepercentage; + tc_timeexp = fls(t + (t >> 1)) - 1; + } else { + tc_timethreshold = INT_MAX; + tc_timeexp = 31; + } ts.tv_sec = tc_timethreshold / 1000000000; ts.tv_nsec = tc_timethreshold % 1000000000; timespec2bintime(&ts, &bt_timethreshold); Modified: projects/calloutng/sys/kern/kern_timeout.c ============================================================================== --- projects/calloutng/sys/kern/kern_timeout.c Thu Dec 13 23:32:47 2012 (r244198) +++ projects/calloutng/sys/kern/kern_timeout.c Fri Dec 14 00:13:29 2012 (r244199) @@ -938,7 +938,7 @@ _callout_reset_on(struct callout *c, str if (to_ticks > 1) bintime_mul(&to_bt, to_ticks); bintime_add(&to_bt, &now); - if (C_PRELGET(flags) == 0) { + if (C_PRELGET(flags) < 0) { pr = halftick_bt; } else { to_ticks >>= C_PRELGET(flags); Modified: projects/calloutng/sys/sys/callout.h ============================================================================== --- projects/calloutng/sys/sys/callout.h Thu Dec 13 23:32:47 2012 (r244198) +++ projects/calloutng/sys/sys/callout.h Fri Dec 14 00:13:29 2012 (r244199) @@ -53,8 +53,8 @@ #define C_DIRECT_EXEC 0x0001 /* direct execution of callout */ #define C_PRELBITS 7 #define C_PRELRANGE ((1 << C_PRELBITS) - 1) -#define C_PRELSET(x) ((x) << 1) -#define C_PRELGET(x) (((x) >> 1) & C_PRELRANGE) +#define C_PRELSET(x) (((x) + 1) << 1) +#define C_PRELGET(x) (int)((((x) >> 1) & C_PRELRANGE) - 1) struct callout_handle { struct callout *callout;