diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-03-27 05:09:21 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-03-27 05:09:21 -0400 |
commit | 4e6d7c2aa95158315902647963b359b32da5c295 (patch) | |
tree | 5141f79302e1e653cde53bab6a981a1b7bfa47b0 /arch | |
parent | 3c435c1e472ba344ee25f795f4807d4457e61f6c (diff) | |
parent | fe5fba05b46c791c95a9f34228ac495f81f72fc0 (diff) |
Merge branch 'timers/core' into perf/timer, to apply dependent patch
An upcoming patch will depend on tai_ns() and NMI-safe ktime_get_raw_fast(),
so merge timers/core here in a separate topic branch until it's all cooked
and timers/core is merged upstream.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/plat-omap/counter_32k.c | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/vdso.c | 10 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 20 | ||||
-rw-r--r-- | arch/sparc/kernel/time_32.c | 6 | ||||
-rw-r--r-- | arch/tile/kernel/time.c | 24 | ||||
-rw-r--r-- | arch/x86/kernel/vsyscall_gtod.c | 24 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 14 |
7 files changed, 48 insertions, 52 deletions
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index 61b4d705c267..43cf74561cfd 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -103,7 +103,7 @@ int __init omap_init_clocksource_32k(void __iomem *vbase) | |||
103 | 103 | ||
104 | /* | 104 | /* |
105 | * 120000 rough estimate from the calculations in | 105 | * 120000 rough estimate from the calculations in |
106 | * __clocksource_updatefreq_scale. | 106 | * __clocksource_update_freq_scale. |
107 | */ | 107 | */ |
108 | clocks_calc_mult_shift(&persistent_mult, &persistent_shift, | 108 | clocks_calc_mult_shift(&persistent_mult, &persistent_shift, |
109 | 32768, NSEC_PER_SEC, 120000); | 109 | 32768, NSEC_PER_SEC, 120000); |
diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index 32aeea083d93..ec37ab3f524f 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c | |||
@@ -200,7 +200,7 @@ up_fail: | |||
200 | void update_vsyscall(struct timekeeper *tk) | 200 | void update_vsyscall(struct timekeeper *tk) |
201 | { | 201 | { |
202 | struct timespec xtime_coarse; | 202 | struct timespec xtime_coarse; |
203 | u32 use_syscall = strcmp(tk->tkr.clock->name, "arch_sys_counter"); | 203 | u32 use_syscall = strcmp(tk->tkr_mono.clock->name, "arch_sys_counter"); |
204 | 204 | ||
205 | ++vdso_data->tb_seq_count; | 205 | ++vdso_data->tb_seq_count; |
206 | smp_wmb(); | 206 | smp_wmb(); |
@@ -213,11 +213,11 @@ void update_vsyscall(struct timekeeper *tk) | |||
213 | vdso_data->wtm_clock_nsec = tk->wall_to_monotonic.tv_nsec; | 213 | vdso_data->wtm_clock_nsec = tk->wall_to_monotonic.tv_nsec; |
214 | 214 | ||
215 | if (!use_syscall) { | 215 | if (!use_syscall) { |
216 | vdso_data->cs_cycle_last = tk->tkr.cycle_last; | 216 | vdso_data->cs_cycle_last = tk->tkr_mono.cycle_last; |
217 | vdso_data->xtime_clock_sec = tk->xtime_sec; | 217 | vdso_data->xtime_clock_sec = tk->xtime_sec; |
218 | vdso_data->xtime_clock_nsec = tk->tkr.xtime_nsec; | 218 | vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec; |
219 | vdso_data->cs_mult = tk->tkr.mult; | 219 | vdso_data->cs_mult = tk->tkr_mono.mult; |
220 | vdso_data->cs_shift = tk->tkr.shift; | 220 | vdso_data->cs_shift = tk->tkr_mono.shift; |
221 | } | 221 | } |
222 | 222 | ||
223 | smp_wmb(); | 223 | smp_wmb(); |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 20660dddb2d6..170ddd2018b3 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -215,20 +215,20 @@ void update_vsyscall(struct timekeeper *tk) | |||
215 | { | 215 | { |
216 | u64 nsecps; | 216 | u64 nsecps; |
217 | 217 | ||
218 | if (tk->tkr.clock != &clocksource_tod) | 218 | if (tk->tkr_mono.clock != &clocksource_tod) |
219 | return; | 219 | return; |
220 | 220 | ||
221 | /* Make userspace gettimeofday spin until we're done. */ | 221 | /* Make userspace gettimeofday spin until we're done. */ |
222 | ++vdso_data->tb_update_count; | 222 | ++vdso_data->tb_update_count; |
223 | smp_wmb(); | 223 | smp_wmb(); |
224 | vdso_data->xtime_tod_stamp = tk->tkr.cycle_last; | 224 | vdso_data->xtime_tod_stamp = tk->tkr_mono.cycle_last; |
225 | vdso_data->xtime_clock_sec = tk->xtime_sec; | 225 | vdso_data->xtime_clock_sec = tk->xtime_sec; |
226 | vdso_data->xtime_clock_nsec = tk->tkr.xtime_nsec; | 226 | vdso_data->xtime_clock_nsec = tk->tkr_mono.xtime_nsec; |
227 | vdso_data->wtom_clock_sec = | 227 | vdso_data->wtom_clock_sec = |
228 | tk->xtime_sec + tk->wall_to_monotonic.tv_sec; | 228 | tk->xtime_sec + tk->wall_to_monotonic.tv_sec; |
229 | vdso_data->wtom_clock_nsec = tk->tkr.xtime_nsec + | 229 | vdso_data->wtom_clock_nsec = tk->tkr_mono.xtime_nsec + |
230 | + ((u64) tk->wall_to_monotonic.tv_nsec << tk->tkr.shift); | 230 | + ((u64) tk->wall_to_monotonic.tv_nsec << tk->tkr_mono.shift); |
231 | nsecps = (u64) NSEC_PER_SEC << tk->tkr.shift; | 231 | nsecps = (u64) NSEC_PER_SEC << tk->tkr_mono.shift; |
232 | while (vdso_data->wtom_clock_nsec >= nsecps) { | 232 | while (vdso_data->wtom_clock_nsec >= nsecps) { |
233 | vdso_data->wtom_clock_nsec -= nsecps; | 233 | vdso_data->wtom_clock_nsec -= nsecps; |
234 | vdso_data->wtom_clock_sec++; | 234 | vdso_data->wtom_clock_sec++; |
@@ -236,7 +236,7 @@ void update_vsyscall(struct timekeeper *tk) | |||
236 | 236 | ||
237 | vdso_data->xtime_coarse_sec = tk->xtime_sec; | 237 | vdso_data->xtime_coarse_sec = tk->xtime_sec; |
238 | vdso_data->xtime_coarse_nsec = | 238 | vdso_data->xtime_coarse_nsec = |
239 | (long)(tk->tkr.xtime_nsec >> tk->tkr.shift); | 239 | (long)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift); |
240 | vdso_data->wtom_coarse_sec = | 240 | vdso_data->wtom_coarse_sec = |
241 | vdso_data->xtime_coarse_sec + tk->wall_to_monotonic.tv_sec; | 241 | vdso_data->xtime_coarse_sec + tk->wall_to_monotonic.tv_sec; |
242 | vdso_data->wtom_coarse_nsec = | 242 | vdso_data->wtom_coarse_nsec = |
@@ -246,8 +246,8 @@ void update_vsyscall(struct timekeeper *tk) | |||
246 | vdso_data->wtom_coarse_sec++; | 246 | vdso_data->wtom_coarse_sec++; |
247 | } | 247 | } |
248 | 248 | ||
249 | vdso_data->tk_mult = tk->tkr.mult; | 249 | vdso_data->tk_mult = tk->tkr_mono.mult; |
250 | vdso_data->tk_shift = tk->tkr.shift; | 250 | vdso_data->tk_shift = tk->tkr_mono.shift; |
251 | smp_wmb(); | 251 | smp_wmb(); |
252 | ++vdso_data->tb_update_count; | 252 | ++vdso_data->tb_update_count; |
253 | } | 253 | } |
@@ -283,7 +283,7 @@ void __init time_init(void) | |||
283 | if (register_external_irq(EXT_IRQ_TIMING_ALERT, timing_alert_interrupt)) | 283 | if (register_external_irq(EXT_IRQ_TIMING_ALERT, timing_alert_interrupt)) |
284 | panic("Couldn't request external interrupt 0x1406"); | 284 | panic("Couldn't request external interrupt 0x1406"); |
285 | 285 | ||
286 | if (clocksource_register(&clocksource_tod) != 0) | 286 | if (__clocksource_register(&clocksource_tod) != 0) |
287 | panic("Could not register TOD clock source"); | 287 | panic("Could not register TOD clock source"); |
288 | 288 | ||
289 | /* Enable TOD clock interrupts on the boot cpu. */ | 289 | /* Enable TOD clock interrupts on the boot cpu. */ |
diff --git a/arch/sparc/kernel/time_32.c b/arch/sparc/kernel/time_32.c index 2f80d23a0a44..18147a5523d9 100644 --- a/arch/sparc/kernel/time_32.c +++ b/arch/sparc/kernel/time_32.c | |||
@@ -181,17 +181,13 @@ static struct clocksource timer_cs = { | |||
181 | .rating = 100, | 181 | .rating = 100, |
182 | .read = timer_cs_read, | 182 | .read = timer_cs_read, |
183 | .mask = CLOCKSOURCE_MASK(64), | 183 | .mask = CLOCKSOURCE_MASK(64), |
184 | .shift = 2, | ||
185 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 184 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
186 | }; | 185 | }; |
187 | 186 | ||
188 | static __init int setup_timer_cs(void) | 187 | static __init int setup_timer_cs(void) |
189 | { | 188 | { |
190 | timer_cs_enabled = 1; | 189 | timer_cs_enabled = 1; |
191 | timer_cs.mult = clocksource_hz2mult(sparc_config.clock_rate, | 190 | return clocksource_register_hz(&timer_cs, sparc_config.clock_rate); |
192 | timer_cs.shift); | ||
193 | |||
194 | return clocksource_register(&timer_cs); | ||
195 | } | 191 | } |
196 | 192 | ||
197 | #ifdef CONFIG_SMP | 193 | #ifdef CONFIG_SMP |
diff --git a/arch/tile/kernel/time.c b/arch/tile/kernel/time.c index d412b0856c0a..00178ecf9aea 100644 --- a/arch/tile/kernel/time.c +++ b/arch/tile/kernel/time.c | |||
@@ -257,34 +257,34 @@ void update_vsyscall_tz(void) | |||
257 | 257 | ||
258 | void update_vsyscall(struct timekeeper *tk) | 258 | void update_vsyscall(struct timekeeper *tk) |
259 | { | 259 | { |
260 | if (tk->tkr.clock != &cycle_counter_cs) | 260 | if (tk->tkr_mono.clock != &cycle_counter_cs) |
261 | return; | 261 | return; |
262 | 262 | ||
263 | write_seqcount_begin(&vdso_data->tb_seq); | 263 | write_seqcount_begin(&vdso_data->tb_seq); |
264 | 264 | ||
265 | vdso_data->cycle_last = tk->tkr.cycle_last; | 265 | vdso_data->cycle_last = tk->tkr_mono.cycle_last; |
266 | vdso_data->mask = tk->tkr.mask; | 266 | vdso_data->mask = tk->tkr_mono.mask; |
267 | vdso_data->mult = tk->tkr.mult; | 267 | vdso_data->mult = tk->tkr_mono.mult; |
268 | vdso_data->shift = tk->tkr.shift; | 268 | vdso_data->shift = tk->tkr_mono.shift; |
269 | 269 | ||
270 | vdso_data->wall_time_sec = tk->xtime_sec; | 270 | vdso_data->wall_time_sec = tk->xtime_sec; |
271 | vdso_data->wall_time_snsec = tk->tkr.xtime_nsec; | 271 | vdso_data->wall_time_snsec = tk->tkr_mono.xtime_nsec; |
272 | 272 | ||
273 | vdso_data->monotonic_time_sec = tk->xtime_sec | 273 | vdso_data->monotonic_time_sec = tk->xtime_sec |
274 | + tk->wall_to_monotonic.tv_sec; | 274 | + tk->wall_to_monotonic.tv_sec; |
275 | vdso_data->monotonic_time_snsec = tk->tkr.xtime_nsec | 275 | vdso_data->monotonic_time_snsec = tk->tkr_mono.xtime_nsec |
276 | + ((u64)tk->wall_to_monotonic.tv_nsec | 276 | + ((u64)tk->wall_to_monotonic.tv_nsec |
277 | << tk->tkr.shift); | 277 | << tk->tkr_mono.shift); |
278 | while (vdso_data->monotonic_time_snsec >= | 278 | while (vdso_data->monotonic_time_snsec >= |
279 | (((u64)NSEC_PER_SEC) << tk->tkr.shift)) { | 279 | (((u64)NSEC_PER_SEC) << tk->tkr_mono.shift)) { |
280 | vdso_data->monotonic_time_snsec -= | 280 | vdso_data->monotonic_time_snsec -= |
281 | ((u64)NSEC_PER_SEC) << tk->tkr.shift; | 281 | ((u64)NSEC_PER_SEC) << tk->tkr_mono.shift; |
282 | vdso_data->monotonic_time_sec++; | 282 | vdso_data->monotonic_time_sec++; |
283 | } | 283 | } |
284 | 284 | ||
285 | vdso_data->wall_time_coarse_sec = tk->xtime_sec; | 285 | vdso_data->wall_time_coarse_sec = tk->xtime_sec; |
286 | vdso_data->wall_time_coarse_nsec = (long)(tk->tkr.xtime_nsec >> | 286 | vdso_data->wall_time_coarse_nsec = (long)(tk->tkr_mono.xtime_nsec >> |
287 | tk->tkr.shift); | 287 | tk->tkr_mono.shift); |
288 | 288 | ||
289 | vdso_data->monotonic_time_coarse_sec = | 289 | vdso_data->monotonic_time_coarse_sec = |
290 | vdso_data->wall_time_coarse_sec + tk->wall_to_monotonic.tv_sec; | 290 | vdso_data->wall_time_coarse_sec + tk->wall_to_monotonic.tv_sec; |
diff --git a/arch/x86/kernel/vsyscall_gtod.c b/arch/x86/kernel/vsyscall_gtod.c index c7d791f32b98..51e330416995 100644 --- a/arch/x86/kernel/vsyscall_gtod.c +++ b/arch/x86/kernel/vsyscall_gtod.c | |||
@@ -31,30 +31,30 @@ void update_vsyscall(struct timekeeper *tk) | |||
31 | gtod_write_begin(vdata); | 31 | gtod_write_begin(vdata); |
32 | 32 | ||
33 | /* copy vsyscall data */ | 33 | /* copy vsyscall data */ |
34 | vdata->vclock_mode = tk->tkr.clock->archdata.vclock_mode; | 34 | vdata->vclock_mode = tk->tkr_mono.clock->archdata.vclock_mode; |
35 | vdata->cycle_last = tk->tkr.cycle_last; | 35 | vdata->cycle_last = tk->tkr_mono.cycle_last; |
36 | vdata->mask = tk->tkr.mask; | 36 | vdata->mask = tk->tkr_mono.mask; |
37 | vdata->mult = tk->tkr.mult; | 37 | vdata->mult = tk->tkr_mono.mult; |
38 | vdata->shift = tk->tkr.shift; | 38 | vdata->shift = tk->tkr_mono.shift; |
39 | 39 | ||
40 | vdata->wall_time_sec = tk->xtime_sec; | 40 | vdata->wall_time_sec = tk->xtime_sec; |
41 | vdata->wall_time_snsec = tk->tkr.xtime_nsec; | 41 | vdata->wall_time_snsec = tk->tkr_mono.xtime_nsec; |
42 | 42 | ||
43 | vdata->monotonic_time_sec = tk->xtime_sec | 43 | vdata->monotonic_time_sec = tk->xtime_sec |
44 | + tk->wall_to_monotonic.tv_sec; | 44 | + tk->wall_to_monotonic.tv_sec; |
45 | vdata->monotonic_time_snsec = tk->tkr.xtime_nsec | 45 | vdata->monotonic_time_snsec = tk->tkr_mono.xtime_nsec |
46 | + ((u64)tk->wall_to_monotonic.tv_nsec | 46 | + ((u64)tk->wall_to_monotonic.tv_nsec |
47 | << tk->tkr.shift); | 47 | << tk->tkr_mono.shift); |
48 | while (vdata->monotonic_time_snsec >= | 48 | while (vdata->monotonic_time_snsec >= |
49 | (((u64)NSEC_PER_SEC) << tk->tkr.shift)) { | 49 | (((u64)NSEC_PER_SEC) << tk->tkr_mono.shift)) { |
50 | vdata->monotonic_time_snsec -= | 50 | vdata->monotonic_time_snsec -= |
51 | ((u64)NSEC_PER_SEC) << tk->tkr.shift; | 51 | ((u64)NSEC_PER_SEC) << tk->tkr_mono.shift; |
52 | vdata->monotonic_time_sec++; | 52 | vdata->monotonic_time_sec++; |
53 | } | 53 | } |
54 | 54 | ||
55 | vdata->wall_time_coarse_sec = tk->xtime_sec; | 55 | vdata->wall_time_coarse_sec = tk->xtime_sec; |
56 | vdata->wall_time_coarse_nsec = (long)(tk->tkr.xtime_nsec >> | 56 | vdata->wall_time_coarse_nsec = (long)(tk->tkr_mono.xtime_nsec >> |
57 | tk->tkr.shift); | 57 | tk->tkr_mono.shift); |
58 | 58 | ||
59 | vdata->monotonic_time_coarse_sec = | 59 | vdata->monotonic_time_coarse_sec = |
60 | vdata->wall_time_coarse_sec + tk->wall_to_monotonic.tv_sec; | 60 | vdata->wall_time_coarse_sec + tk->wall_to_monotonic.tv_sec; |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 32bf19ef3115..0ee725f1896d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1070,19 +1070,19 @@ static void update_pvclock_gtod(struct timekeeper *tk) | |||
1070 | struct pvclock_gtod_data *vdata = &pvclock_gtod_data; | 1070 | struct pvclock_gtod_data *vdata = &pvclock_gtod_data; |
1071 | u64 boot_ns; | 1071 | u64 boot_ns; |
1072 | 1072 | ||
1073 | boot_ns = ktime_to_ns(ktime_add(tk->tkr.base_mono, tk->offs_boot)); | 1073 | boot_ns = ktime_to_ns(ktime_add(tk->tkr_mono.base, tk->offs_boot)); |
1074 | 1074 | ||
1075 | write_seqcount_begin(&vdata->seq); | 1075 | write_seqcount_begin(&vdata->seq); |
1076 | 1076 | ||
1077 | /* copy pvclock gtod data */ | 1077 | /* copy pvclock gtod data */ |
1078 | vdata->clock.vclock_mode = tk->tkr.clock->archdata.vclock_mode; | 1078 | vdata->clock.vclock_mode = tk->tkr_mono.clock->archdata.vclock_mode; |
1079 | vdata->clock.cycle_last = tk->tkr.cycle_last; | 1079 | vdata->clock.cycle_last = tk->tkr_mono.cycle_last; |
1080 | vdata->clock.mask = tk->tkr.mask; | 1080 | vdata->clock.mask = tk->tkr_mono.mask; |
1081 | vdata->clock.mult = tk->tkr.mult; | 1081 | vdata->clock.mult = tk->tkr_mono.mult; |
1082 | vdata->clock.shift = tk->tkr.shift; | 1082 | vdata->clock.shift = tk->tkr_mono.shift; |
1083 | 1083 | ||
1084 | vdata->boot_ns = boot_ns; | 1084 | vdata->boot_ns = boot_ns; |
1085 | vdata->nsec_base = tk->tkr.xtime_nsec; | 1085 | vdata->nsec_base = tk->tkr_mono.xtime_nsec; |
1086 | 1086 | ||
1087 | write_seqcount_end(&vdata->seq); | 1087 | write_seqcount_end(&vdata->seq); |
1088 | } | 1088 | } |