svn commit: r264388 - in head/sys: kern sys

Davide Italiano davide at FreeBSD.org
Sat Apr 12 23:29:30 UTC 2014


Author: davide
Date: Sat Apr 12 23:29:29 2014
New Revision: 264388
URL: http://svnweb.freebsd.org/changeset/base/264388

Log:
  Hide internal details of sbintime_t implementation wrapping INT64_MAX into
  SBT_MAX, to make it more robust in case internal type representation will
  change in the future. All the consumers were migrated to SBT_MAX and
  every new consumer (if any) should from now use this interface.
  
  Requested by:	bapt, jmg, Ryan Lortie (implictly)
  Reviewed by:	mav, bde

Modified:
  head/sys/kern/kern_clocksource.c
  head/sys/kern/kern_event.c
  head/sys/kern/kern_timeout.c
  head/sys/kern/sys_generic.c
  head/sys/sys/time.h

Modified: head/sys/kern/kern_clocksource.c
==============================================================================
--- head/sys/kern/kern_clocksource.c	Sat Apr 12 22:36:26 2014	(r264387)
+++ head/sys/kern/kern_clocksource.c	Sat Apr 12 23:29:29 2014	(r264388)
@@ -217,13 +217,13 @@ handleevents(sbintime_t now, int fake)
 	} else
 		state->nextprof = state->nextstat;
 	if (now >= state->nextcallopt) {
-		state->nextcall = state->nextcallopt = INT64_MAX;
+		state->nextcall = state->nextcallopt = SBT_MAX;
 		callout_process(now);
 	}
 
 #ifdef KDTRACE_HOOKS
 	if (fake == 0 && now >= state->nextcyc && cyclic_clock_func != NULL) {
-		state->nextcyc = INT64_MAX;
+		state->nextcyc = SBT_MAX;
 		(*cyclic_clock_func)(frame);
 	}
 #endif
@@ -509,7 +509,7 @@ configtimer(int start)
 			state = DPCPU_ID_PTR(cpu, timerstate);
 			state->now = now;
 			if (!smp_started && cpu != CPU_FIRST())
-				state->nextevent = INT64_MAX;
+				state->nextevent = SBT_MAX;
 			else
 				state->nextevent = next;
 			if (periodic)
@@ -598,10 +598,10 @@ cpu_initclocks_bsp(void)
 		state = DPCPU_ID_PTR(cpu, timerstate);
 		mtx_init(&state->et_hw_mtx, "et_hw_mtx", NULL, MTX_SPIN);
 #ifdef KDTRACE_HOOKS
-		state->nextcyc = INT64_MAX;
+		state->nextcyc = SBT_MAX;
 #endif
-		state->nextcall = INT64_MAX;
-		state->nextcallopt = INT64_MAX;
+		state->nextcall = SBT_MAX;
+		state->nextcallopt = SBT_MAX;
 	}
 	periodic = want_periodic;
 	/* Grab requested timer or the best of present. */

Modified: head/sys/kern/kern_event.c
==============================================================================
--- head/sys/kern/kern_event.c	Sat Apr 12 22:36:26 2014	(r264387)
+++ head/sys/kern/kern_event.c	Sat Apr 12 23:29:29 2014	(r264388)
@@ -528,8 +528,8 @@ timer2sbintime(intptr_t data)
 {
 
 #ifdef __LP64__
-	if (data > INT64_MAX / SBT_1MS)
-		return INT64_MAX;
+	if (data > SBT_MAX / SBT_1MS)
+		return (SBT_MAX);
 #endif
 	return (SBT_1MS * data);
 }
@@ -1399,7 +1399,7 @@ kqueue_scan(struct kqueue *kq, int maxev
 				rsbt = tstosbt(*tsp);
 				if (TIMESEL(&asbt, rsbt))
 					asbt += tc_tick_sbt;
-				if (asbt <= INT64_MAX - rsbt)
+				if (asbt <= SBT_MAX - rsbt)
 					asbt += rsbt;
 				else
 					asbt = 0;

Modified: head/sys/kern/kern_timeout.c
==============================================================================
--- head/sys/kern/kern_timeout.c	Sat Apr 12 22:36:26 2014	(r264387)
+++ head/sys/kern/kern_timeout.c	Sat Apr 12 23:29:29 2014	(r264388)
@@ -302,7 +302,7 @@ callout_cpu_init(struct callout_cpu *cc)
 	for (i = 0; i < callwheelsize; i++)
 		LIST_INIT(&cc->cc_callwheel[i]);
 	TAILQ_INIT(&cc->cc_expireq);
-	cc->cc_firstevent = INT64_MAX;
+	cc->cc_firstevent = SBT_MAX;
 	for (i = 0; i < 2; i++)
 		cc_cce_cleanup(cc, i);
 	if (cc->cc_callout == NULL)	/* Only cpu0 handles timeout(9) */
@@ -574,8 +574,8 @@ callout_cc_add(struct callout *c, struct
 	 * Inform the eventtimers(4) subsystem there's a new callout
 	 * that has been inserted, but only if really required.
 	 */
-	if (INT64_MAX - c->c_time < c->c_precision)
-		c->c_precision = INT64_MAX - c->c_time;
+	if (SBT_MAX - c->c_time < c->c_precision)
+		c->c_precision = SBT_MAX - c->c_time;
 	sbt = c->c_time + c->c_precision;
 	if (sbt < cc->cc_firstevent) {
 		cc->cc_firstevent = sbt;
@@ -953,8 +953,8 @@ callout_reset_sbt_on(struct callout *c, 
 				to_sbt += tick_sbt;
 		} else
 			to_sbt = sbinuptime();
-		if (INT64_MAX - to_sbt < sbt)
-			to_sbt = INT64_MAX;
+		if (SBT_MAX - to_sbt < sbt)
+			to_sbt = SBT_MAX;
 		else
 			to_sbt += sbt;
 		pr = ((C_PRELGET(flags) < 0) ? sbt >> tc_precexp :

Modified: head/sys/kern/sys_generic.c
==============================================================================
--- head/sys/kern/sys_generic.c	Sat Apr 12 22:36:26 2014	(r264387)
+++ head/sys/kern/sys_generic.c	Sat Apr 12 23:29:29 2014	(r264388)
@@ -1072,7 +1072,7 @@ kern_select(struct thread *td, int nd, f
 			precision >>= tc_precexp;
 			if (TIMESEL(&asbt, rsbt))
 				asbt += tc_tick_sbt;
-			if (asbt <= INT64_MAX - rsbt)
+			if (asbt <= SBT_MAX - rsbt)
 				asbt += rsbt;
 			else
 				asbt = -1;
@@ -1547,7 +1547,7 @@ selsocket(struct socket *so, int events,
 			precision >>= tc_precexp;
 			if (TIMESEL(&asbt, rsbt))
 				asbt += tc_tick_sbt;
-			if (asbt <= INT64_MAX - rsbt)
+			if (asbt <= SBT_MAX - rsbt)
 				asbt += rsbt;
 			else
 				asbt = -1;

Modified: head/sys/sys/time.h
==============================================================================
--- head/sys/sys/time.h	Sat Apr 12 22:36:26 2014	(r264387)
+++ head/sys/sys/time.h	Sat Apr 12 23:29:29 2014	(r264388)
@@ -129,6 +129,7 @@ bintime_shift(struct bintime *_bt, int _
 #define	SBT_1MS	(SBT_1S / 1000)
 #define	SBT_1US	(SBT_1S / 1000000)
 #define	SBT_1NS	(SBT_1S / 1000000000)
+#define	SBT_MAX	INT64_MAX
 
 static __inline int
 sbintime_getsec(sbintime_t _sbt)


More information about the svn-src-head mailing list