Add interface to derive a TSC frequency from the pvclock
This can later use this to determine the TSC frequency like is done with VMware, instead of using a DELAY loop that is not always accurate in an VM. MFC after: 1 month
This commit is contained in:
parent
d3ccddf3ce
commit
4025433eb2
@ -51,6 +51,7 @@ struct pvclock_wall_clock {
|
||||
|
||||
void pvclock_resume(void);
|
||||
uint64_t pvclock_get_last_cycles(void);
|
||||
uint64_t pvclock_tsc_freq(struct pvclock_vcpu_time_info *ti);
|
||||
uint64_t pvclock_get_timecount(struct pvclock_vcpu_time_info *ti);
|
||||
void pvclock_get_wallclock(struct pvclock_wall_clock *wc,
|
||||
struct timespec *ts);
|
||||
|
@ -58,6 +58,21 @@ pvclock_get_last_cycles(void)
|
||||
return (atomic_load_acq_64(&pvclock_last_cycles));
|
||||
}
|
||||
|
||||
uint64_t
|
||||
pvclock_tsc_freq(struct pvclock_vcpu_time_info *ti)
|
||||
{
|
||||
uint64_t freq;
|
||||
|
||||
freq = (1000000000ULL << 32) / ti->tsc_to_system_mul;
|
||||
|
||||
if (ti->tsc_shift < 0)
|
||||
freq <<= -ti->tsc_shift;
|
||||
else
|
||||
freq >>= ti->tsc_shift;
|
||||
|
||||
return (freq);
|
||||
}
|
||||
|
||||
/*
|
||||
* Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
|
||||
* yielding a 64-bit result.
|
||||
|
Loading…
x
Reference in New Issue
Block a user