Skip to content

Commit

Permalink
x86: paravirt: factor out cpu_khz to common code
Browse files Browse the repository at this point in the history
KVM intends to use paravirt code to calibrate khz. Xen
current code will do just fine. So as a first step, factor out
code to pvclock.c.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
  • Loading branch information
Glauber Costa authored and Avi Kivity committed Oct 15, 2008
1 parent 3cf57fe commit 3807f34
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
12 changes: 12 additions & 0 deletions arch/x86/kernel/pvclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,18 @@ static unsigned pvclock_get_time_values(struct pvclock_shadow_time *dst,
return dst->version;
}

unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src)
{
u64 tsc_khz = 1000000ULL << 32;

do_div(tsc_khz, src->tsc_to_system_mul);
if (src->tsc_shift < 0)
tsc_khz <<= -src->tsc_shift;
else
tsc_khz >>= src->tsc_shift;
return tsc_khz;
}

cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
{
struct pvclock_shadow_time shadow;
Expand Down
11 changes: 2 additions & 9 deletions arch/x86/xen/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,17 +198,10 @@ unsigned long long xen_sched_clock(void)
/* Get the TSC speed from Xen */
unsigned long xen_tsc_khz(void)
{
u64 xen_khz = 1000000ULL << 32;
const struct pvclock_vcpu_time_info *info =
struct pvclock_vcpu_time_info *info =
&HYPERVISOR_shared_info->vcpu_info[0].time;

do_div(xen_khz, info->tsc_to_system_mul);
if (info->tsc_shift < 0)
xen_khz <<= -info->tsc_shift;
else
xen_khz >>= info->tsc_shift;

return xen_khz;
return pvclock_tsc_khz(info);
}

cycle_t xen_clocksource_read(void)
Expand Down
1 change: 1 addition & 0 deletions include/asm-x86/pvclock.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

/* some helper functions for xen and kvm pv clock sources */
cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
struct pvclock_vcpu_time_info *vcpu,
struct timespec *ts);
Expand Down

0 comments on commit 3807f34

Please sign in to comment.