diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-06-16 13:22:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-06-16 13:22:56 -0400 |
commit | efba92d58fa37d714d665deddb5cc6458b39bb88 (patch) | |
tree | 3f7c598b41b340b98bbf9bd042fafe039c9269bd /kernel | |
parent | f763cf8e47d3aa4b081e0537d060c12818de8d0f (diff) | |
parent | e3ff9c3678b4d80e22d2557b68726174578eaf52 (diff) |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner:
"A set of small fixes:
- Repair the ktime_get_coarse() functions so they actually deliver
what they are supposed to: tick granular time stamps. The current
code missed to add the accumulated nanoseconds part of the
timekeeper so the resulting granularity was 1 second.
- Prevent the tracer from infinitely recursing into time getter
functions in the arm architectured timer by marking these functions
notrace
- Fix a trivial compiler warning caused by wrong qualifier ordering"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
timekeeping: Repair ktime_get_coarse*() granularity
clocksource/drivers/arm_arch_timer: Don't trace count reader functions
clocksource/drivers/timer-ti-dm: Change to new style declaration
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/timekeeping.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 85f5912d8f70..44b726bab4bd 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
@@ -808,17 +808,18 @@ ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs) | |||
808 | struct timekeeper *tk = &tk_core.timekeeper; | 808 | struct timekeeper *tk = &tk_core.timekeeper; |
809 | unsigned int seq; | 809 | unsigned int seq; |
810 | ktime_t base, *offset = offsets[offs]; | 810 | ktime_t base, *offset = offsets[offs]; |
811 | u64 nsecs; | ||
811 | 812 | ||
812 | WARN_ON(timekeeping_suspended); | 813 | WARN_ON(timekeeping_suspended); |
813 | 814 | ||
814 | do { | 815 | do { |
815 | seq = read_seqcount_begin(&tk_core.seq); | 816 | seq = read_seqcount_begin(&tk_core.seq); |
816 | base = ktime_add(tk->tkr_mono.base, *offset); | 817 | base = ktime_add(tk->tkr_mono.base, *offset); |
818 | nsecs = tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift; | ||
817 | 819 | ||
818 | } while (read_seqcount_retry(&tk_core.seq, seq)); | 820 | } while (read_seqcount_retry(&tk_core.seq, seq)); |
819 | 821 | ||
820 | return base; | 822 | return base + nsecs; |
821 | |||
822 | } | 823 | } |
823 | EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset); | 824 | EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset); |
824 | 825 | ||