Skip to content

Commit daa67b4

Browse files
Nicholas Mc GuireKAGA-KOKO
authored andcommitted
time: Allow gcc to fold constants when possible
To allow constant folding in msecs_to_jiffies() conditionally calls the HZ dependent _msecs_to_jiffies() helpers or, when gcc can not figure out constant folding, __msecs_to_jiffies which is the renamed original msecs_to_jiffies() function. Signed-off-by: Nicholas Mc Guire <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: Sam Ravnborg <[email protected]> Cc: Joe Perches <[email protected]> Cc: John Stultz <[email protected]> Cc: Andrew Hunter <[email protected]> Cc: Paul Turner <[email protected]> Cc: Michal Marek <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Thomas Gleixner <[email protected]>
1 parent ca42aaf commit daa67b4

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

include/linux/jiffies.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,12 +343,24 @@ static inline unsigned long _msecs_to_jiffies(const unsigned int m)
343343
* handling any 32-bit overflows.
344344
* for the details see __msecs_to_jiffies()
345345
*
346-
* the HZ range specific helpers _msecs_to_jiffies() are called from
347-
* __msecs_to_jiffies().
346+
* msecs_to_jiffies() checks for the passed in value being a constant
347+
* via __builtin_constant_p() allowing gcc to eliminate most of the
348+
* code, __msecs_to_jiffies() is called if the value passed does not
349+
* allow constant folding and the actual conversion must be done at
350+
* runtime.
351+
* the HZ range specific helpers _msecs_to_jiffies() are called both
352+
* directly here and from __msecs_to_jiffies() in the case where
353+
* constant folding is not possible.
348354
*/
349355
static inline unsigned long msecs_to_jiffies(const unsigned int m)
350356
{
351-
return __msecs_to_jiffies(m);
357+
if (__builtin_constant_p(m)) {
358+
if ((int)m < 0)
359+
return MAX_JIFFY_OFFSET;
360+
return _msecs_to_jiffies(m);
361+
} else {
362+
return __msecs_to_jiffies(m);
363+
}
352364
}
353365

354366
extern unsigned long usecs_to_jiffies(const unsigned int u);

0 commit comments

Comments
 (0)