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
Unified · Split
| @@ -149,22 +149,22 @@ u32 arch_timer_reg_read(int access, enum arch_timer_reg reg, · 148 unmodified lines | |||
| 149 | return val; | 149 | return val; |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | static u64 arch_counter_get_cntpct_stable(void) | 152 | static notrace u64 arch_counter_get_cntpct_stable(void) |
| 153 | { | 153 | { |
| 154 | return __arch_counter_get_cntpct_stable(); | 154 | return __arch_counter_get_cntpct_stable(); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | static u64 arch_counter_get_cntpct(void) | 157 | static notrace u64 arch_counter_get_cntpct(void) |
| 158 | { | 158 | { |
| 159 | return __arch_counter_get_cntpct(); | 159 | return __arch_counter_get_cntpct(); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | static u64 arch_counter_get_cntvct_stable(void) | 162 | static notrace u64 arch_counter_get_cntvct_stable(void) |
| 163 | { | 163 | { |
| 164 | return __arch_counter_get_cntvct_stable(); | 164 | return __arch_counter_get_cntvct_stable(); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | static u64 arch_counter_get_cntvct(void) | 167 | static notrace u64 arch_counter_get_cntvct(void) |
| 168 | { | 168 | { |
| 169 | return __arch_counter_get_cntvct(); | 169 | return __arch_counter_get_cntvct(); |
| 170 | } | 170 | } |
| @@ -896,7 +896,7 @@ static int omap_dm_timer_remove(struct platform_device *pdev) · 895 unmodified lines | |||
| 896 | return ret; | 896 | return ret; |
| 897 | } | 897 | } |
| 898 | 898 | ||
| 899 | const static struct omap_dm_timer_ops dmtimer_ops = { | 899 | static const struct omap_dm_timer_ops dmtimer_ops = { |
| 900 | .request_by_node = omap_dm_timer_request_by_node, | 900 | .request_by_node = omap_dm_timer_request_by_node, |
| 901 | .request_specific = omap_dm_timer_request_specific, | 901 | .request_specific = omap_dm_timer_request_specific, |
| 902 | .request = omap_dm_timer_request, | 902 | .request = omap_dm_timer_request, |
| @@ -808,17 +808,18 @@ ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs) · 807 unmodified lines | |||
| 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 | ||