regs[2] &= (is_64bit ? bitmaskof(X86_FEATURE_LAHF_LM) : 0);
regs[3] &= ((is_pae ? bitmaskof(X86_FEATURE_NX) : 0) |
(is_64bit ? bitmaskof(X86_FEATURE_LM) : 0) |
- (is_64bit ? bitmaskof(X86_FEATURE_SYSCALL) : 0));
+ (is_64bit ? bitmaskof(X86_FEATURE_SYSCALL) : 0) |
+ (is_64bit ? bitmaskof(X86_FEATURE_RDTSCP) : 0));
break;
}
{
struct vmx_msr_state *guest_state = &v->arch.hvm_vmx.msr_state;
guest_state->msrs[VMX_INDEX_MSR_TSC_AUX] = msr_content;
- wrmsrl(MSR_TSC_AUX, msr_content);
+ wrmsrl(MSR_TSC_AUX, (uint32_t)msr_content);
}
else
{
}
if ( cpu_has_rdtscp )
- wrmsrl(MSR_TSC_AUX, host_msr_state->msrs[VMX_INDEX_MSR_TSC_AUX]);
+ wrmsrl(MSR_TSC_AUX,
+ (uint32_t)host_msr_state->msrs[VMX_INDEX_MSR_TSC_AUX]);
}
static void vmx_save_guest_msrs(struct vcpu *v)
}
if ( cpu_has_rdtscp )
- wrmsrl(MSR_TSC_AUX, guest_msr_state->msrs[VMX_INDEX_MSR_TSC_AUX]);
+ wrmsrl(MSR_TSC_AUX,
+ (uint32_t)guest_msr_state->msrs[VMX_INDEX_MSR_TSC_AUX]);
}
#else /* __i386__ */
data->msr_syscall_mask = guest_state->msrs[VMX_INDEX_MSR_SYSCALL_MASK];
if ( cpu_has_rdtscp )
data->msr_tsc_aux = guest_state->msrs[VMX_INDEX_MSR_TSC_AUX];
+ else
+ data->msr_tsc_aux = 0;
#endif
data->tsc = hvm_get_guest_tsc(v);
v->arch.hvm_vmx.shadow_gs = data->shadow_gs;
if ( cpu_has_rdtscp )
guest_state->msrs[VMX_INDEX_MSR_TSC_AUX] = data->msr_tsc_aux;
+ else
+ guest_state->msrs[VMX_INDEX_MSR_TSC_AUX] = 0;
#endif
hvm_set_guest_tsc(v, data->tsc);
else
*edx &= ~(bitmaskof(X86_FEATURE_SYSCALL));
-#ifdef __x86_64__
- if ( cpu_has_rdtscp )
- *edx |= bitmaskof(X86_FEATURE_RDTSCP);
- else
- *edx &= ~(bitmaskof(X86_FEATURE_RDTSCP));
-#endif
-
break;
}