aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2015-03-19 04:36:19 -0400
committerIngo Molnar <mingo@kernel.org>2015-03-27 04:45:08 -0400
commit4498e7467e9e441c18ca12f1ca08460356e0508a (patch)
tree8f375eea5056d16193ca5f4c2aa81d88e697d089 /kernel/time
parent4a4ad80d32cea69ee93bd4589f24dc478804cd80 (diff)
time: Parametrize all tk_fast_mono users
In preparation for more tk_fast instances, remove all hard-coded tk_fast_mono references. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: John Stultz <john.stultz@linaro.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20150319093400.484279927@infradead.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/time')
-rw-r--r--kernel/time/timekeeping.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index cbb612ee813f..278373edb472 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -364,18 +364,18 @@ static inline s64 timekeeping_get_ns(struct tk_read_base *tkr)
364 * slightly wrong timestamp (a few nanoseconds). See 364 * slightly wrong timestamp (a few nanoseconds). See
365 * @ktime_get_mono_fast_ns. 365 * @ktime_get_mono_fast_ns.
366 */ 366 */
367static void update_fast_timekeeper(struct tk_read_base *tkr) 367static void update_fast_timekeeper(struct tk_read_base *tkr, struct tk_fast *tkf)
368{ 368{
369 struct tk_read_base *base = tk_fast_mono.base; 369 struct tk_read_base *base = tkf->base;
370 370
371 /* Force readers off to base[1] */ 371 /* Force readers off to base[1] */
372 raw_write_seqcount_latch(&tk_fast_mono.seq); 372 raw_write_seqcount_latch(&tkf->seq);
373 373
374 /* Update base[0] */ 374 /* Update base[0] */
375 memcpy(base, tkr, sizeof(*base)); 375 memcpy(base, tkr, sizeof(*base));
376 376
377 /* Force readers back to base[0] */ 377 /* Force readers back to base[0] */
378 raw_write_seqcount_latch(&tk_fast_mono.seq); 378 raw_write_seqcount_latch(&tkf->seq);
379 379
380 /* Update base[1] */ 380 /* Update base[1] */
381 memcpy(base + 1, base, sizeof(*base)); 381 memcpy(base + 1, base, sizeof(*base));
@@ -413,20 +413,25 @@ static void update_fast_timekeeper(struct tk_read_base *tkr)
413 * of the following timestamps. Callers need to be aware of that and 413 * of the following timestamps. Callers need to be aware of that and
414 * deal with it. 414 * deal with it.
415 */ 415 */
416u64 notrace ktime_get_mono_fast_ns(void) 416static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
417{ 417{
418 struct tk_read_base *tkr; 418 struct tk_read_base *tkr;
419 unsigned int seq; 419 unsigned int seq;
420 u64 now; 420 u64 now;
421 421
422 do { 422 do {
423 seq = raw_read_seqcount(&tk_fast_mono.seq); 423 seq = raw_read_seqcount(&tkf->seq);
424 tkr = tk_fast_mono.base + (seq & 0x01); 424 tkr = tkf->base + (seq & 0x01);
425 now = ktime_to_ns(tkr->base) + timekeeping_get_ns(tkr); 425 now = ktime_to_ns(tkr->base) + timekeeping_get_ns(tkr);
426 } while (read_seqcount_retry(&tkf->seq, seq));
426 427
427 } while (read_seqcount_retry(&tk_fast_mono.seq, seq));
428 return now; 428 return now;
429} 429}
430
431u64 ktime_get_mono_fast_ns(void)
432{
433 return __ktime_get_fast_ns(&tk_fast_mono);
434}
430EXPORT_SYMBOL_GPL(ktime_get_mono_fast_ns); 435EXPORT_SYMBOL_GPL(ktime_get_mono_fast_ns);
431 436
432/* Suspend-time cycles value for halted fast timekeeper. */ 437/* Suspend-time cycles value for halted fast timekeeper. */
@@ -455,7 +460,7 @@ static void halt_fast_timekeeper(struct timekeeper *tk)
455 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy)); 460 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
456 cycles_at_suspend = tkr->read(tkr->clock); 461 cycles_at_suspend = tkr->read(tkr->clock);
457 tkr_dummy.read = dummy_clock_read; 462 tkr_dummy.read = dummy_clock_read;
458 update_fast_timekeeper(&tkr_dummy); 463 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
459} 464}
460 465
461#ifdef CONFIG_GENERIC_TIME_VSYSCALL_OLD 466#ifdef CONFIG_GENERIC_TIME_VSYSCALL_OLD
@@ -586,7 +591,7 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
586 memcpy(&shadow_timekeeper, &tk_core.timekeeper, 591 memcpy(&shadow_timekeeper, &tk_core.timekeeper,
587 sizeof(tk_core.timekeeper)); 592 sizeof(tk_core.timekeeper));
588 593
589 update_fast_timekeeper(&tk->tkr_mono); 594 update_fast_timekeeper(&tk->tkr_mono, &tk_fast_mono);
590} 595}
591 596
592/** 597/**