Author: imp
Date: Sat Apr 13 04:46:35 2019
New Revision: 346176
URL: https://svnweb.freebsd.org/changeset/base/346176

Log:
  Fix sbttons for values > 2s
  
  Add test against negative times. Add code to cope with larger values
  properly.
  
  Discussed with: bde@ (quite some time ago, for an earlier version)

Modified:
  head/sys/sys/time.h

Modified: head/sys/sys/time.h
==============================================================================
--- head/sys/sys/time.h Sat Apr 13 04:42:17 2019        (r346175)
+++ head/sys/sys/time.h Sat Apr 13 04:46:35 2019        (r346176)
@@ -184,8 +184,18 @@ sbttobt(sbintime_t _sbt)
 static __inline int64_t
 sbttons(sbintime_t _sbt)
 {
+       uint64_t ns;
 
-       return ((1000000000 * _sbt) >> 32);
+#ifdef KASSERT
+       KASSERT(_sbt >= 0, ("Negative values illegal for sbttons: %jx", _sbt));
+#endif
+       ns = _sbt;
+       if (ns >= SBT_1S)
+               ns = (ns >> 32) * 1000000000;
+       else
+               ns = 0;
+
+       return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
 }
 
 static __inline sbintime_t
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to