uint64_t *elapsed_nsec, uint32_t *gtsc_khz,
uint32_t *incarnation)
{
+ bool_t enable_tsc_scaling = has_hvm_container_domain(d) &&
+ cpu_has_tsc_ratio && !d->arch.vtsc;
+
*incarnation = d->arch.incarnation;
*tsc_mode = d->arch.tsc_mode;
}
tsc = rdtsc();
*elapsed_nsec = scale_delta(tsc, &d->arch.vtsc_to_ns);
- *gtsc_khz = cpu_khz;
+ *gtsc_khz = enable_tsc_scaling ? d->arch.tsc_khz : cpu_khz;
break;
case TSC_MODE_PVRDTSCP:
if ( d->arch.vtsc )
else
{
tsc = rdtsc();
- *elapsed_nsec = scale_delta(tsc, &d->arch.vtsc_to_ns) -
+ *elapsed_nsec = scale_delta(tsc, &this_cpu(cpu_time).tsc_scale) -
d->arch.vtsc_offset;
- *gtsc_khz = 0; /* ignored by tsc_set_info */
+ *gtsc_khz = enable_tsc_scaling ? d->arch.tsc_khz
+ : 0 /* ignored by tsc_set_info */;
}
break;
}