void hvm_set_guest_time(struct vcpu *v, u64 gtime)
{
u64 host_tsc;
-
+
rdtscll(host_tsc);
-
+
v->arch.hvm_vcpu.cache_tsc_offset = gtime - host_tsc;
hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
}
hvm_init_ap_context(ctxt, vcpuid, trampoline_vector);
+ /* Sync AP's TSC with BSP's. */
+ v->arch.hvm_vcpu.cache_tsc_offset =
+ v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
+ hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
+
LOCK_BIGLOCK(d);
rc = -EEXIST;
if ( !test_bit(_VCPUF_initialised, &v->vcpu_flags) )
error |= __vmwrite(HOST_RSP, (unsigned long)get_stack_bottom());
}
-#if 0
-static void vmx_do_launch(struct vcpu *v)
-{
- if ( v->vcpu_id != 0 )
- {
- /* Sync AP's TSC with BSP's */
- v->arch.hvm_vcpu.cache_tsc_offset =
- v->domain->vcpu[0]->arch.hvm_vcpu.cache_tsc_offset;
- hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
- }
-}
-#endif
-
static int construct_vmcs(struct vcpu *v)
{
int error = 0;