* [PATCH 1/2] time: refactor usecs_to_jiffies
@ 2015-05-28 17:09 Nicholas Mc Guire
2015-05-28 17:09 ` [PATCH 2/2] time: allow gcc to fold constants when possible Nicholas Mc Guire
2015-06-12 9:30 ` [tip:timers/core] time: Refactor usecs_to_jiffies tip-bot for Nicholas Mc Guire
0 siblings, 2 replies; 9+ messages in thread
From: Nicholas Mc Guire @ 2015-05-28 17:09 UTC (permalink / raw)
To: Michal Marek
Cc: Masahiro Yamada, Sam Ravnborg, Thomas Gleixner, H. Peter Alvin,
Joe Perches, John Stultz, Andrew Hunter, Paul Turner,
linux-kernel, Nicholas Mc Guire
Refactor the usecs_to_jiffies conditional code part in time.c and
jiffies.h putting it into conditional functions rather than #ifdefs
to improve readability. This is analogous to the msecs_to_jiffies()
cleanup commit ca42aaf0c861 ("time: Refactor msecs_to_jiffies")
Patch was build tested for:
arm - imx_v6_v7_defconfig, vexpress_defconfig
cris - etrax-100lx_v2_defconfig
ia64 - generic_defconfig
(though with lots of build warnings both with and without patch)
m68k - multi_defconfig
mips32 - ar7_defconfig,
mips64 - loongson3_defconfig
powerpc - 44x/virtex5_defconfig
powerpc64 - ppc64_defconfig
s390 - failed to build for all defconfigs with toolchain from kernel.org
(cc1: error: unrecognized command line option '-mtune=zEC12')
sh - se7780_defconfig,
sparc32 - sparc32_defconfig
sparc64 - sparc64_defconfig
x86 64 - x86_64_defconfig,
patch is against 4.1-rc5 (localversion-next is -next-20150527)
Link: http://lkml.org/lkml/2015/5/18/273
Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
---
Verification of const folding
config: x86_64_defconfig + CONFIG_DRM_GMA500=m, CONFIG_DRM_GMA3600=y
drivers/gpu/drm/gma500/intel_gmbus.c
204 gpio->algo.timeout = usecs_to_jiffies(2200);
-> reduced to load instruction
config: x86_64_defconfig + CONFIG_INFINIBAND=m, CONFIG_INFINIBAND_QIB=m
drivers/infiniband/hw/qib/qib_qp.c
809 qp->timeout = attr->timeout;
810 qp->timeout_jiffies =
811 usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
812 1000UL);
-> call __usecs_to_jiffies
include/linux/jiffies.h | 27 ++++++++++++++++++++++++++-
kernel/time/time.c | 13 +++----------
:2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 3bde5eb..cf6eaaf 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -362,7 +362,32 @@ static inline unsigned long msecs_to_jiffies(const unsigned int m)
}
}
-extern unsigned long usecs_to_jiffies(const unsigned int u);
+extern unsigned long __usecs_to_jiffies(const unsigned int u);
+#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
+}
+#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return u * (HZ / USEC_PER_SEC);
+}
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+#else
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
+ >> USEC_TO_HZ_SHR32;
+}
+#endif
+
+static inline unsigned long usecs_to_jiffies(const unsigned int u)
+{
+ return __usecs_to_jiffies(u);
+}
+
extern unsigned long timespec_to_jiffies(const struct timespec *value);
extern void jiffies_to_timespec(const unsigned long jiffies,
struct timespec *value);
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 972e3bb..85d5bb1 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -522,20 +522,13 @@ unsigned long __msecs_to_jiffies(const unsigned int m)
}
EXPORT_SYMBOL(__msecs_to_jiffies);
-unsigned long usecs_to_jiffies(const unsigned int u)
+unsigned long __usecs_to_jiffies(const unsigned int u)
{
if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
return MAX_JIFFY_OFFSET;
-#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
- return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
-#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
- return u * (HZ / USEC_PER_SEC);
-#else
- return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
- >> USEC_TO_HZ_SHR32;
-#endif
+ return _usecs_to_jiffies(u);
}
-EXPORT_SYMBOL(usecs_to_jiffies);
+EXPORT_SYMBOL(__usecs_to_jiffies);
/*
* The TICK_NSEC - 1 rounds up the value to the next resolution. Note
--
1.7.10.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] time: allow gcc to fold constants when possible
2015-05-28 17:09 [PATCH 1/2] time: refactor usecs_to_jiffies Nicholas Mc Guire
@ 2015-05-28 17:09 ` Nicholas Mc Guire
2015-05-28 18:02 ` Joe Perches
2015-06-12 9:30 ` [tip:timers/core] time: Allow gcc to fold usecs_to_jiffies( constant) tip-bot for Nicholas Mc Guire
2015-06-12 9:30 ` [tip:timers/core] time: Refactor usecs_to_jiffies tip-bot for Nicholas Mc Guire
1 sibling, 2 replies; 9+ messages in thread
From: Nicholas Mc Guire @ 2015-05-28 17:09 UTC (permalink / raw)
To: Michal Marek
Cc: Masahiro Yamada, Sam Ravnborg, Thomas Gleixner, H. Peter Alvin,
Joe Perches, John Stultz, Andrew Hunter, Paul Turner,
linux-kernel, Nicholas Mc Guire
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.
Patch was build tested for:
arm - imx_v6_v7_defconfig, vexpress_defconfig
cris - etrax-100lx_v2_defconfig
ia64 - generic_defconfig
(though with lots of build warnings both with and without patch)
m68k - multi_defconfig
mips32 - ar7_defconfig,
mips64 - loongson3_defconfig
powerpc - 44x/virtex5_defconfig
powerpc64 - ppc64_defconfig
s390 - failed to build for all defconfigs with toolchain from kernel.org
(cc1: error: unrecognized command line option '-mtune=zEC12')
sh - se7780_defconfig,
sparc32 - sparc32_defconfig
sparc64 - sparc64_defconfig
x86 64 - x86_64_defconfig,
patch is against 4.1-rc5 (localversion-next is -next-20150527)
Link: http://lkml.org/lkml/2015/5/18/274
Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
---
Thanks to Joe Perches <joe@perches.com> for suggesting this approach.
and helping with the initial msecs_to_jiffies cleanup patch.
Verification of const folding:
config: x86_64_defconfig + CONFIG_DRM_GMA500=m, CONFIG_DRM_GMA3600=y
drivers/gpu/drm/gma500/intel_gmbus.c
204 gpio->algo.timeout = usecs_to_jiffies(2200);
-> reduced to load instruction
config: x86_64_defconfig + CONFIG_INFINIBAND=m, CONFIG_INFINIBAND_QIB=m
drivers/infiniband/hw/qib/qib_qp.c
809 qp->timeout = attr->timeout;
810 qp->timeout_jiffies =
811 usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
812 1000UL);
-> call __usecs_to_jiffies
include/linux/jiffies.h | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index cf6eaaf..c0aa150 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)
}
#endif
+/**
+ * usecs_to_jiffies: - convert microseconds to jiffies
+ * @u: time in microseconds
+ *
+ * conversion is done as follows:
+ *
+ * - 'too large' values [that would result in larger than
+ * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
+ *
+ * - all other values are converted to jiffies by either multiplying
+ * the input value by a factor or dividing it with a factor and
+ * handling any 32-bit overflows as for msecs_to_jiffies.
+ *
+ * usecs_to_jiffies() checks for the passed in value being a constant
+ * via __builtin_constant_p() allowing gcc to eliminate most of the
+ * code, __usecs_to_jiffies() is called if the value passed does not
+ * allow constant folding and the actual conversion must be done at
+ * runtime.
+ * the HZ range specific helpers _usecs_to_jiffies() are called both
+ * directly here and from __msecs_to_jiffies() in the case where
+ * constant folding is not possible.
+ */
static inline unsigned long usecs_to_jiffies(const unsigned int u)
{
- return __usecs_to_jiffies(u);
+ if (__builtin_constant_p(u)) {
+ if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
+ return MAX_JIFFY_OFFSET;
+ return _usecs_to_jiffies(u);
+ } else {
+ return __usecs_to_jiffies(u);
+ }
}
extern unsigned long timespec_to_jiffies(const struct timespec *value);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] time: allow gcc to fold constants when possible
2015-05-28 17:09 ` [PATCH 2/2] time: allow gcc to fold constants when possible Nicholas Mc Guire
@ 2015-05-28 18:02 ` Joe Perches
2015-06-02 21:23 ` Thomas Gleixner
2015-06-12 9:30 ` [tip:timers/core] time: Allow gcc to fold usecs_to_jiffies( constant) tip-bot for Nicholas Mc Guire
1 sibling, 1 reply; 9+ messages in thread
From: Joe Perches @ 2015-05-28 18:02 UTC (permalink / raw)
To: Nicholas Mc Guire
Cc: Michal Marek, Masahiro Yamada, Sam Ravnborg, Thomas Gleixner,
H. Peter Alvin, John Stultz, Andrew Hunter, Paul Turner,
linux-kernel
On Thu, 2015-05-28 at 19:09 +0200, Nicholas Mc Guire wrote:
> 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.
Hi Nicholas.
Thanks for following through with this.
The subject might be nicer if it referenced usecs_to_jiffies
instead of being a bit generic.
Maybe something like:
time: allow gcc to fold usecs_to_jiffies(constant)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] time: allow gcc to fold constants when possible
2015-05-28 18:02 ` Joe Perches
@ 2015-06-02 21:23 ` Thomas Gleixner
2015-06-02 21:31 ` John Stultz
2015-06-04 7:27 ` Nicholas Mc Guire
0 siblings, 2 replies; 9+ messages in thread
From: Thomas Gleixner @ 2015-06-02 21:23 UTC (permalink / raw)
To: Joe Perches
Cc: Nicholas Mc Guire, Michal Marek, Masahiro Yamada, Sam Ravnborg,
H. Peter Alvin, John Stultz, Andrew Hunter, Paul Turner,
linux-kernel
On Thu, 28 May 2015, Joe Perches wrote:
> On Thu, 2015-05-28 at 19:09 +0200, Nicholas Mc Guire wrote:
> > 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.
>
> Hi Nicholas.
>
> Thanks for following through with this.
>
> The subject might be nicer if it referenced usecs_to_jiffies
> instead of being a bit generic.
>
> Maybe something like:
>
> time: allow gcc to fold usecs_to_jiffies(constant)
And for correctness sake the first letter after the colon, i.e. the
one starting the sentence wants to be uppercase.
I'm going to fix that up all together when applying the lot. No need
for resend.
Thanks,
tglx
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] time: allow gcc to fold constants when possible
2015-06-02 21:23 ` Thomas Gleixner
@ 2015-06-02 21:31 ` John Stultz
2015-06-02 21:41 ` Joe Perches
2015-06-04 7:27 ` Nicholas Mc Guire
1 sibling, 1 reply; 9+ messages in thread
From: John Stultz @ 2015-06-02 21:31 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Joe Perches, Nicholas Mc Guire, Michal Marek, Masahiro Yamada,
Sam Ravnborg, H. Peter Alvin, Andrew Hunter, Paul Turner, lkml
On Tue, Jun 2, 2015 at 2:23 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> On Thu, 28 May 2015, Joe Perches wrote:
>> On Thu, 2015-05-28 at 19:09 +0200, Nicholas Mc Guire wrote:
>> > 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.
>>
>> Hi Nicholas.
>>
>> Thanks for following through with this.
>>
>> The subject might be nicer if it referenced usecs_to_jiffies
>> instead of being a bit generic.
>>
>> Maybe something like:
>>
>> time: allow gcc to fold usecs_to_jiffies(constant)
>
> And for correctness sake the first letter after the colon, i.e. the
> one starting the sentence wants to be uppercase.
Is this something that would be worth adding to checkpatch?
thanks
-john
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] time: allow gcc to fold constants when possible
2015-06-02 21:31 ` John Stultz
@ 2015-06-02 21:41 ` Joe Perches
0 siblings, 0 replies; 9+ messages in thread
From: Joe Perches @ 2015-06-02 21:41 UTC (permalink / raw)
To: John Stultz
Cc: Thomas Gleixner, Nicholas Mc Guire, Michal Marek,
Masahiro Yamada, Sam Ravnborg, H. Peter Alvin, Andrew Hunter,
Paul Turner, lkml
On Tue, 2015-06-02 at 14:31 -0700, John Stultz wrote:
> On Tue, Jun 2, 2015 at 2:23 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> > On Thu, 28 May 2015, Joe Perches wrote:
> >> On Thu, 2015-05-28 at 19:09 +0200, Nicholas Mc Guire wrote:
> >> > 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.
> >>
> >> Hi Nicholas.
> >>
> >> Thanks for following through with this.
> >>
> >> The subject might be nicer if it referenced usecs_to_jiffies
> >> instead of being a bit generic.
> >>
> >> Maybe something like:
> >>
> >> time: allow gcc to fold usecs_to_jiffies(constant)
> >
> > And for correctness sake the first letter after the colon, i.e. the
> > one starting the sentence wants to be uppercase.
>
> Is this something that would be worth adding to checkpatch?
Probably not as different people have different standards.
$ git log --no-merges --pretty=oneline -10000 | \
cut -f2- -d" " | \
sed -r -e 's/^.*:\s+//' -e 's/^(.).*/\1/' | \
sort | uniq -c
It's about 50:50 upper case to lower case
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] time: allow gcc to fold constants when possible
2015-06-02 21:23 ` Thomas Gleixner
2015-06-02 21:31 ` John Stultz
@ 2015-06-04 7:27 ` Nicholas Mc Guire
1 sibling, 0 replies; 9+ messages in thread
From: Nicholas Mc Guire @ 2015-06-04 7:27 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Joe Perches, Nicholas Mc Guire, Michal Marek, Masahiro Yamada,
Sam Ravnborg, H. Peter Alvin, John Stultz, Andrew Hunter,
Paul Turner, linux-kernel
On Tue, 02 Jun 2015, Thomas Gleixner wrote:
> On Thu, 28 May 2015, Joe Perches wrote:
> > On Thu, 2015-05-28 at 19:09 +0200, Nicholas Mc Guire wrote:
> > > 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.
> >
> > Hi Nicholas.
> >
> > Thanks for following through with this.
> >
> > The subject might be nicer if it referenced usecs_to_jiffies
> > instead of being a bit generic.
> >
> > Maybe something like:
> >
> > time: allow gcc to fold usecs_to_jiffies(constant)
>
> And for correctness sake the first letter after the colon, i.e. the
> one starting the sentence wants to be uppercase.
>
added to my list of checks - sorry for being sloppy on that
> I'm going to fix that up all together when applying the lot. No need
> for resend.
>
thanks !
hofrat
^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:timers/core] time: Refactor usecs_to_jiffies
2015-05-28 17:09 [PATCH 1/2] time: refactor usecs_to_jiffies Nicholas Mc Guire
2015-05-28 17:09 ` [PATCH 2/2] time: allow gcc to fold constants when possible Nicholas Mc Guire
@ 2015-06-12 9:30 ` tip-bot for Nicholas Mc Guire
1 sibling, 0 replies; 9+ messages in thread
From: tip-bot for Nicholas Mc Guire @ 2015-06-12 9:30 UTC (permalink / raw)
To: linux-tip-commits
Cc: hofrat, ahh, hpa, john.stultz, tglx, joe, mmarek, sam, pjt,
linux-kernel, mingo, yamada.m
Commit-ID: ae60d6a0e3a9197d37f8c8c4584a8ecd18518cd6
Gitweb: http://git.kernel.org/tip/ae60d6a0e3a9197d37f8c8c4584a8ecd18518cd6
Author: Nicholas Mc Guire <hofrat@osadl.org>
AuthorDate: Thu, 28 May 2015 19:09:55 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 10 Jun 2015 11:31:13 +0200
time: Refactor usecs_to_jiffies
Refactor the usecs_to_jiffies conditional code part in time.c and
jiffies.h putting it into conditional functions rather than #ifdefs
to improve readability. This is analogous to the msecs_to_jiffies()
cleanup in commit ca42aaf0c861 ("time: Refactor msecs_to_jiffies")
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-1-git-send-email-hofrat@osadl.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
include/linux/jiffies.h | 27 ++++++++++++++++++++++++++-
kernel/time/time.c | 13 +++----------
2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 3bde5eb..a316ebe 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -362,7 +362,32 @@ static inline unsigned long msecs_to_jiffies(const unsigned int m)
}
}
-extern unsigned long usecs_to_jiffies(const unsigned int u);
+extern unsigned long __usecs_to_jiffies(const unsigned int u);
+#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
+}
+#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return u * (HZ / USEC_PER_SEC);
+}
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+#else
+static inline unsigned long _usecs_to_jiffies(const unsigned int u)
+{
+ return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
+ >> USEC_TO_HZ_SHR32;
+}
+#endif
+
+static inline unsigned long usecs_to_jiffies(const unsigned int u)
+{
+ return __usecs_to_jiffies(u);
+}
+
extern unsigned long timespec_to_jiffies(const struct timespec *value);
extern void jiffies_to_timespec(const unsigned long jiffies,
struct timespec *value);
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 972e3bb..85d5bb1 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -522,20 +522,13 @@ unsigned long __msecs_to_jiffies(const unsigned int m)
}
EXPORT_SYMBOL(__msecs_to_jiffies);
-unsigned long usecs_to_jiffies(const unsigned int u)
+unsigned long __usecs_to_jiffies(const unsigned int u)
{
if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
return MAX_JIFFY_OFFSET;
-#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ)
- return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ);
-#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC)
- return u * (HZ / USEC_PER_SEC);
-#else
- return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
- >> USEC_TO_HZ_SHR32;
-#endif
+ return _usecs_to_jiffies(u);
}
-EXPORT_SYMBOL(usecs_to_jiffies);
+EXPORT_SYMBOL(__usecs_to_jiffies);
/*
* The TICK_NSEC - 1 rounds up the value to the next resolution. Note
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [tip:timers/core] time: Allow gcc to fold usecs_to_jiffies( constant)
2015-05-28 17:09 ` [PATCH 2/2] time: allow gcc to fold constants when possible Nicholas Mc Guire
2015-05-28 18:02 ` Joe Perches
@ 2015-06-12 9:30 ` tip-bot for Nicholas Mc Guire
1 sibling, 0 replies; 9+ messages in thread
From: tip-bot for Nicholas Mc Guire @ 2015-06-12 9:30 UTC (permalink / raw)
To: linux-tip-commits
Cc: yamada.m, joe, hpa, mingo, ahh, tglx, john.stultz, mmarek, pjt,
linux-kernel, hofrat, sam
Commit-ID: c569a23d65ac2900d9998d3fe04044fe95be6b2f
Gitweb: http://git.kernel.org/tip/c569a23d65ac2900d9998d3fe04044fe95be6b2f
Author: Nicholas Mc Guire <hofrat@osadl.org>
AuthorDate: Thu, 28 May 2015 19:09:56 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 10 Jun 2015 11:31:14 +0200
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>
---
include/linux/jiffies.h | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index a316ebe..535fd3b 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)
}
#endif
+/**
+ * usecs_to_jiffies: - convert microseconds to jiffies
+ * @u: time in microseconds
+ *
+ * conversion is done as follows:
+ *
+ * - 'too large' values [that would result in larger than
+ * MAX_JIFFY_OFFSET values] mean 'infinite timeout' too.
+ *
+ * - all other values are converted to jiffies by either multiplying
+ * the input value by a factor or dividing it with a factor and
+ * handling any 32-bit overflows as for msecs_to_jiffies.
+ *
+ * usecs_to_jiffies() checks for the passed in value being a constant
+ * via __builtin_constant_p() allowing gcc to eliminate most of the
+ * code, __usecs_to_jiffies() is called if the value passed does not
+ * allow constant folding and the actual conversion must be done at
+ * runtime.
+ * the HZ range specific helpers _usecs_to_jiffies() are called both
+ * directly here and from __msecs_to_jiffies() in the case where
+ * constant folding is not possible.
+ */
static inline unsigned long usecs_to_jiffies(const unsigned int u)
{
- return __usecs_to_jiffies(u);
+ if (__builtin_constant_p(u)) {
+ if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET))
+ return MAX_JIFFY_OFFSET;
+ return _usecs_to_jiffies(u);
+ } else {
+ return __usecs_to_jiffies(u);
+ }
}
extern unsigned long timespec_to_jiffies(const struct timespec *value);
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-06-12 9:32 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-28 17:09 [PATCH 1/2] time: refactor usecs_to_jiffies Nicholas Mc Guire
2015-05-28 17:09 ` [PATCH 2/2] time: allow gcc to fold constants when possible Nicholas Mc Guire
2015-05-28 18:02 ` Joe Perches
2015-06-02 21:23 ` Thomas Gleixner
2015-06-02 21:31 ` John Stultz
2015-06-02 21:41 ` Joe Perches
2015-06-04 7:27 ` Nicholas Mc Guire
2015-06-12 9:30 ` [tip:timers/core] time: Allow gcc to fold usecs_to_jiffies( constant) tip-bot for Nicholas Mc Guire
2015-06-12 9:30 ` [tip:timers/core] time: Refactor usecs_to_jiffies tip-bot for Nicholas Mc Guire
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.