On 20/12/2019 16:05, Jan Beulich wrote: >> + wrmsrl(HV_X64_MSR_REFERENCE_TSC, tsc_msr); >> + >> + /* Get TSC frequency from Hyper-V */ >> + rdmsrl(HV_X64_MSR_TSC_FREQUENCY, freq); >> + pts->frequency = freq; >> + >> + return freq; >> +} >> + >> +static inline uint64_t read_hyperv_timer(void) >> +{ >> + uint64_t scale, offset, ret, tsc; >> + uint32_t seq; >> + const struct ms_hyperv_tsc_page *tsc_page = hyperv_tsc; >> + >> + do { >> + seq = tsc_page->tsc_sequence; >> + >> + /* Seq 0 is special. It means the TSC enlightenment is not >> + * available at the moment. The reference time can only be >> + * obtained from the Reference Counter MSR. >> + */ >> + if ( seq == 0 ) >> + { >> + rdmsrl(HV_X64_MSR_TIME_REF_COUNT, ret); >> + return ret; >> + } >> + >> + /* rdtsc_ordered already contains a load fence */ >> + tsc = rdtsc_ordered(); >> + scale = tsc_page->tsc_scale; >> + offset = tsc_page->tsc_offset; >> + >> + smp_rmb(); >> + >> + } while (tsc_page->tsc_sequence != seq);
Style. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel