Author: hselasky
Date: Fri May 13 11:02:02 2016
New Revision: 299656
URL: https://svnweb.freebsd.org/changeset/base/299656

Log:
  Implement nsecs_to_jiffies() in the LinuxKPI and while at it
  streamline the rest of the xxx_to_jiffies() functions to have a
  constant 64-bit argument and use identical range checks for the
  result.
  
  Specifically preserve msecs_to_jiffies(0) returning 0. See r282743 for
  further details.
  
  MFC after:    1 week
  Sponsored by: Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/jiffies.h

Modified: head/sys/compat/linuxkpi/common/include/linux/jiffies.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/jiffies.h     Fri May 13 
10:59:46 2016        (r299655)
+++ head/sys/compat/linuxkpi/common/include/linux/jiffies.h     Fri May 13 
11:02:02 2016        (r299656)
@@ -2,7 +2,7 @@
  * Copyright (c) 2010 Isilon Systems, Inc.
  * Copyright (c) 2010 iX Systems, Inc.
  * Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,16 +39,6 @@
 #include <sys/kernel.h>
 #include <sys/limits.h>
 
-static inline int
-msecs_to_jiffies(int msec)
-{
-       struct timeval tv;
-
-       tv.tv_sec = msec / 1000;
-       tv.tv_usec = (msec % 1000) * 1000;
-       return (tvtohz(&tv) - 1);
-}
-
 #define jiffies                 ticks
 #define        jiffies_64              ticks
 #define jiffies_to_msecs(x)     (((int64_t)(x)) * 1000 / hz)
@@ -78,17 +68,35 @@ timespec_to_jiffies(const struct timespe
 }
 
 static inline int
-usecs_to_jiffies(const unsigned int u)
+msecs_to_jiffies(const u64 msec)
 {
        u64 result;
 
-       result = ((u64)u * hz + 1000000 - 1) / 1000000;
+       result = howmany(msec * (u64)hz, 1000ULL);
        if (result > MAX_JIFFY_OFFSET)
                result = MAX_JIFFY_OFFSET;
 
        return ((int)result);
 }
 
+static inline int
+usecs_to_jiffies(const u64 u)
+{
+       u64 result;
+
+       result = howmany(u * (u64)hz, 1000000ULL);
+       if (result > MAX_JIFFY_OFFSET)
+               result = MAX_JIFFY_OFFSET;
+
+       return ((int)result);
+}
+
+static inline u64
+nsecs_to_jiffies(const u64 n)
+{
+       return (usecs_to_jiffies(howmany(n, 1000ULL)));
+}
+
 static inline u64
 get_jiffies_64(void)
 {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to