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 | 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 | 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 | 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 | 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 | 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 | 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 | 900 | .request_by_node = omap_dm_timer_request_by_node, |
| 901 | 901 | .request_specific = omap_dm_timer_request_specific, |
| 902 | 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 | 808 | struct timekeeper *tk = &tk_core.timekeeper; |
| 809 | 809 | unsigned int seq; |
| 810 | 810 | ktime_t base, *offset = offsets[offs]; |
| 811 | + u64 nsecs; | |
| 811 | 812 | |
| 812 | 813 | WARN_ON(timekeeping_suspended); |
| 813 | 814 | |
| 814 | 815 | do { |
| 815 | 816 | seq = read_seqcount_begin(&tk_core.seq); |
| 816 | 817 | base = ktime_add(tk->tkr_mono.base, *offset); |
| 818 | + nsecs = tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift; | |
| 817 | 819 | |
| 818 | 820 | } while (read_seqcount_retry(&tk_core.seq, seq)); |
| 819 | 821 | |
| 820 | − return base; | |
| 821 | − | |
| 822 | + return base + nsecs; | |
| 822 | 823 | } |
| 823 | 824 | EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset); |
| 824 | 825 | |