aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2012-07-27 14:48:09 -0400
committerIngo Molnar <mingo@kernel.org>2012-07-31 11:09:12 -0400
commita7ea3bbf5d58f4df2265d312f91d5769eabc8144 (patch)
tree81a261f4d92732eb1cf5f567064c2c5c950b2190 /include
parent1f815faec46e83bc96039797151846b60875bb06 (diff)
time/jiffies: Allow CLOCK_TICK_RATE to be undefined
CLOCK_TICK_RATE is a legacy constant that defines the timer device's granularity. On hardware with particularly coarse granularity, this constant is used to reduce accumulated time error when using jiffies as a clocksource, by calculating the hardware's actual tick length rather then just assuming it is 1sec/HZ. However, for the most part this is unnecessary, as most modern systems don't use jiffies for their clocksource, and their tick device is sufficiently fine grained to avoid major error. Thus, this patch allows an architecture to not define CLOCK_TICK_RATE, in which case ACTHZ defaults to (HZ << 8). Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Cc: Richard Cochran <richardcochran@gmail.com> Cc: Prarit Bhargava <prarit@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> [ Commit log & intention tweaks ] Signed-off-by: John Stultz <john.stultz@linaro.org> Link: http://lkml.kernel.org/r/1343414893-45779-2-git-send-email-john.stultz@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/jiffies.h12
1 files changed, 8 insertions, 4 deletions
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 265e2c3cbd1c..7d24466fb80b 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -39,9 +39,6 @@
39# error Invalid value of HZ. 39# error Invalid value of HZ.
40#endif 40#endif
41 41
42/* LATCH is used in the interval timer and ftape setup. */
43#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
44
45/* Suppose we want to divide two numbers NOM and DEN: NOM/DEN, then we can 42/* Suppose we want to divide two numbers NOM and DEN: NOM/DEN, then we can
46 * improve accuracy by shifting LSH bits, hence calculating: 43 * improve accuracy by shifting LSH bits, hence calculating:
47 * (NOM << LSH) / DEN 44 * (NOM << LSH) / DEN
@@ -54,8 +51,15 @@
54#define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \ 51#define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \
55 + ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN)) 52 + ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN))
56 53
54#ifdef CLOCK_TICK_RATE
55/* LATCH is used in the interval timer and ftape setup. */
56# define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
57
57/* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */ 58/* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */
58#define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8)) 59# define ACTHZ (SH_DIV(CLOCK_TICK_RATE, LATCH, 8))
60#else
61# define ACTHZ (HZ << 8)
62#endif
59 63
60/* TICK_NSEC is the time between ticks in nsec assuming real ACTHZ */ 64/* TICK_NSEC is the time between ticks in nsec assuming real ACTHZ */
61#define TICK_NSEC (SH_DIV (1000000UL * 1000, ACTHZ, 8)) 65#define TICK_NSEC (SH_DIV (1000000UL * 1000, ACTHZ, 8))