diff options
author | John Stultz <john.stultz@linaro.org> | 2015-03-12 00:16:31 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-03-12 05:16:38 -0400 |
commit | fb82fe2fe8588745edd73aa3a6229facac5c1e15 (patch) | |
tree | 1ab7c25dfa0e89f83f07fad2a04467d8c7864ebb /include | |
parent | 362fde0410377e468ca00ad363fdf3e3ec42eb6a (diff) |
clocksource: Add 'max_cycles' to 'struct clocksource'
In order to facilitate clocksource validation, add a
'max_cycles' field to the clocksource structure which
will hold the maximum cycle value that can safely be
multiplied without potentially causing an overflow.
Signed-off-by: John Stultz <john.stultz@linaro.org>
Cc: Dave Jones <davej@codemonkey.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1426133800-29329-4-git-send-email-john.stultz@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/clocksource.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 9c78d15d33e4..16d048cadebb 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -56,6 +56,7 @@ struct module; | |||
56 | * @shift: cycle to nanosecond divisor (power of two) | 56 | * @shift: cycle to nanosecond divisor (power of two) |
57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) | 57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) |
58 | * @maxadj: maximum adjustment value to mult (~11%) | 58 | * @maxadj: maximum adjustment value to mult (~11%) |
59 | * @max_cycles: maximum safe cycle value which won't overflow on multiplication | ||
59 | * @flags: flags describing special properties | 60 | * @flags: flags describing special properties |
60 | * @archdata: arch-specific data | 61 | * @archdata: arch-specific data |
61 | * @suspend: suspend function for the clocksource, if necessary | 62 | * @suspend: suspend function for the clocksource, if necessary |
@@ -76,7 +77,7 @@ struct clocksource { | |||
76 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA | 77 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA |
77 | struct arch_clocksource_data archdata; | 78 | struct arch_clocksource_data archdata; |
78 | #endif | 79 | #endif |
79 | 80 | u64 max_cycles; | |
80 | const char *name; | 81 | const char *name; |
81 | struct list_head list; | 82 | struct list_head list; |
82 | int rating; | 83 | int rating; |
@@ -189,7 +190,7 @@ extern struct clocksource * __init clocksource_default_clock(void); | |||
189 | extern void clocksource_mark_unstable(struct clocksource *cs); | 190 | extern void clocksource_mark_unstable(struct clocksource *cs); |
190 | 191 | ||
191 | extern u64 | 192 | extern u64 |
192 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask); | 193 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cycles); |
193 | extern void | 194 | extern void |
194 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | 195 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); |
195 | 196 | ||