Commit 90be8d6c authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

timekeeping: Consolidate fast timekeeper



Provide a inline function which replaces the copy & pasta.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220415091921.072296632@linutronix.de
parent eff4849f
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -429,6 +429,14 @@ static void update_fast_timekeeper(const struct tk_read_base *tkr,
	memcpy(base + 1, base, sizeof(*base));
}

static __always_inline u64 fast_tk_get_delta_ns(struct tk_read_base *tkr)
{
	u64 delta, cycles = tk_clock_read(tkr);

	delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask);
	return timekeeping_delta_to_ns(tkr, delta);
}

static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
{
	struct tk_read_base *tkr;
@@ -439,12 +447,7 @@ static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
		seq = raw_read_seqcount_latch(&tkf->seq);
		tkr = tkf->base + (seq & 0x01);
		now = ktime_to_ns(tkr->base);

		now += timekeeping_delta_to_ns(tkr,
				clocksource_delta(
					tk_clock_read(tkr),
					tkr->cycle_last,
					tkr->mask));
		now += fast_tk_get_delta_ns(tkr);
	} while (read_seqcount_latch_retry(&tkf->seq, seq));

	return now;
@@ -560,10 +563,7 @@ static __always_inline u64 __ktime_get_real_fast(struct tk_fast *tkf, u64 *mono)
		tkr = tkf->base + (seq & 0x01);
		basem = ktime_to_ns(tkr->base);
		baser = ktime_to_ns(tkr->base_real);

		delta = timekeeping_delta_to_ns(tkr,
				clocksource_delta(tk_clock_read(tkr),
				tkr->cycle_last, tkr->mask));
		delta = fast_tk_get_delta_ns(tkr);
	} while (read_seqcount_latch_retry(&tkf->seq, seq));

	if (mono)