From: David Woodhouse <[email protected]> Sent: Tuesday, May 26, 2026 4:06 PM > > From: David Woodhouse <[email protected]> > > Implement the read_raw() callback for the Hyper-V TSC page > clocksource. This returns the derived 10MHz reference time (for > timekeeping) while also providing the raw TSC value that was used > to compute it. > > When the TSC page is valid, hv_read_tsc_page_tsc() atomically > captures both values from a single RDTSC inside the sequence-counter > protected read. When the TSC page is invalid (sequence == 0), raw is > set to zero indicating no value is available. > > This enables ktime_get_snapshot_id() to provide the raw TSC to > consumers like KVM's master clock when running nested on Hyper-V. > > Signed-off-by: David Woodhouse <[email protected]> > Assisted-by: Kiro:claude-opus-4.6-1m
Looking narrowly at just the Hyper-V clocksource code in this patch: Reviewed-by: Michael Kelley <[email protected]> > --- > drivers/clocksource/hyperv_timer.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/clocksource/hyperv_timer.c > b/drivers/clocksource/hyperv_timer.c > index e9f5034a1bc8..c5ae01fdbd8e 100644 > --- a/drivers/clocksource/hyperv_timer.c > +++ b/drivers/clocksource/hyperv_timer.c > @@ -444,6 +444,18 @@ static u64 notrace read_hv_clock_tsc_cs(struct > clocksource *arg) > return read_hv_clock_tsc(); > } > > +static u64 notrace read_hv_clock_tsc_cs_raw(struct clocksource *arg, u64 > *raw) > +{ > + u64 time; > + > + if (!hv_read_tsc_page_tsc(tsc_page, raw, &time)) { > + time = read_hv_clock_msr(); > + *raw = 0; > + } > + > + return time; > +} > + > static u64 noinstr read_hv_sched_clock_tsc(void) > { > return (read_hv_clock_tsc() - hv_sched_clock_offset) * > @@ -495,6 +507,8 @@ static struct clocksource hyperv_cs_tsc = { > .name = "hyperv_clocksource_tsc_page", > .rating = 500, > .read = read_hv_clock_tsc_cs, > + .read_raw = read_hv_clock_tsc_cs_raw, > + .raw_csid = CSID_X86_TSC, > .mask = CLOCKSOURCE_MASK(64), > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > .suspend= suspend_hv_clock_tsc, > -- > 2.54.0 >

