mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-16 13:23:36 +00:00
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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=278184
|
@ -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…
Reference in a new issue