aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Mc Guire <hofrat@osadl.org>2015-05-28 13:09:56 -0400
committerThomas Gleixner <tglx@linutronix.de>2015-06-10 05:31:14 -0400
commitc569a23d65ac2900d9998d3fe04044fe95be6b2f (patch)
treeecc4e449ec0918189cc6b78855980636069417f7
parentae60d6a0e3a9197d37f8c8c4584a8ecd18518cd6 (diff)
time: Allow gcc to fold usecs_to_jiffies(constant)
To allow constant folding in usecs_to_jiffies() conditionally calls the HZ dependent _usecs_to_jiffies() helpers or, when gcc can not figure out constant folding, __usecs_to_jiffies, which is the renamed original usecs_to_jiffies() function. Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> Cc: Masahiro Yamada <yamada.m@jp.panasonic.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Joe Perches <joe@perches.com> Cc: John Stultz <john.stultz@linaro.org> Cc: Andrew Hunter <ahh@google.com> Cc: Paul Turner <pjt@google.com> Cc: Michal Marek <mmarek@suse.cz> Link: http://lkml.kernel.org/r/1432832996-12129-2-git-send-email-hofrat@osadl.org Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/linux/jiffies.h30
1 files changed, 29 insertions, 1 deletions
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index a316ebea0a89..535fd3bb1ba8 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -383,9 +383,37 @@ static inline unsigned long _usecs_to_jiffies(const unsigned int u)
383} 383}
384#endif 384#endif
385 385
386/**
387 * usecs_to_jiffies: - convert microseconds to jiffies
388 * @u: time in microseconds
389 *
390 * conversion is done as follows:
391 *
392 * - 'too large' values [that would result in larger than
393 * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
394 *
395 * - all other values are converted to jiffies by either multiplying
396 * the input value by a factor or dividing it with a factor and
397 * handling any 32-bit overflows as for msecs_to_jiffies.
398 *
399 * usecs_to_jiffies() checks for the passed in value being a constant
400 * via __builtin_constant_p() allowing gcc to eliminate most of the
401 * code, __usecs_to_jiffies() is called if the value passed does not
402 * allow constant folding and the actual conversion must be done at
403 * runtime.
404 * the HZ range specific helpers _usecs_to_jiffies() are called both
405 * directly here and from __msecs_to_jiffies() in the case where
406 * constant folding is not possible.
407 */
386static inline unsigned long usecs_to_jiffies(const unsigned int u) 408static inline unsigned long usecs_to_jiffies(const unsigned int u)
387{ 409{
388 return __usecs_to_jiffies(u); 410 if (__builtin_constant_p(u)) {
411 if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
412 return MAX_JIFFY_OFFSET;
413 return _usecs_to_jiffies(u);
414 } else {
415 return __usecs_to_jiffies(u);
416 }
389} 417}
390 418
391extern unsigned long timespec_to_jiffies(const struct timespec *value); 419extern unsigned long timespec_to_jiffies(const struct timespec *value);