Messages in this thread Patch in this message | | | From | Nicholas Mc Guire <> | Subject | [PATCH 1/2] time: refactor usecs_to_jiffies | Date | Thu, 28 May 2015 19:09:55 +0200 |
| |
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
| |