Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Jun 2011 07:02:06 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r222670 - in head/sys/cddl/compat/opensolaris: kern sys
Message-ID:  <201106040702.p54726O6098336@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Sat Jun  4 07:02:06 2011
New Revision: 222670
URL: http://svn.freebsd.org/changeset/base/222670

Log:
  opensolaris compat / zfs: avoid early overflow in ddi_get_lbolt*
  
  Reported by:	David P. Discher <dpd@bitgravity.com>
  Tested by:	will
  Reviewed by:	art
  Discussed with:	dwhite
  MFC after:	2 weeks

Modified:
  head/sys/cddl/compat/opensolaris/kern/opensolaris.c
  head/sys/cddl/compat/opensolaris/sys/time.h

Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris.c
==============================================================================
--- head/sys/cddl/compat/opensolaris/kern/opensolaris.c	Sat Jun  4 04:35:12 2011	(r222669)
+++ head/sys/cddl/compat/opensolaris/kern/opensolaris.c	Sat Jun  4 07:02:06 2011	(r222670)
@@ -40,6 +40,7 @@
 cpu_core_t	cpu_core[MAXCPU];
 kmutex_t	cpu_lock;
 solaris_cpu_t	solaris_cpu[MAXCPU];
+int		nsec_per_tick;
 
 /*
  *  OpenSolaris subsystem initialisation.
@@ -60,6 +61,8 @@ opensolaris_load(void *dummy)
 	}
 
 	mutex_init(&cpu_lock, "OpenSolaris CPU lock", MUTEX_DEFAULT, NULL);
+
+	nsec_per_tick = NANOSEC / hz;
 }
 
 SYSINIT(opensolaris_register, SI_SUB_OPENSOLARIS, SI_ORDER_FIRST, opensolaris_load, NULL);

Modified: head/sys/cddl/compat/opensolaris/sys/time.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/time.h	Sat Jun  4 04:35:12 2011	(r222669)
+++ head/sys/cddl/compat/opensolaris/sys/time.h	Sat Jun  4 07:02:06 2011	(r222670)
@@ -62,8 +62,21 @@ gethrtime(void) {
 #define	gethrestime(ts)		getnanotime(ts)
 #define	gethrtime_waitfree()	gethrtime()
 
-#define	ddi_get_lbolt()		((gethrtime() * hz) / NANOSEC)
-#define	ddi_get_lbolt64()	(int64_t)((gethrtime() * hz) / NANOSEC)
+extern int nsec_per_tick;	/* nanoseconds per clock tick */
+
+static __inline int64_t
+ddi_get_lbolt64(void)
+{
+
+	return (gethrtime() / nsec_per_tick);
+}
+
+static __inline clock_t
+ddi_get_lbolt(void)
+{
+
+	return (ddi_get_lbolt64());
+}
 
 #else
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106040702.p54726O6098336>