@@ -1477,6 +1477,18 @@ void vmx_vcpu_load_vmcs(struct kvm_vcpu *vcpu, int
cpu,
(unsigned long)(cpu_entry_stack(cpu) + 1)); }
+#ifdef CONFIG_X86_64
/* Per-CPU FRED MSRs */
if (cpu_feature_enabled(X86_FEATURE_FRED)) {
how about kvm_cpu_cap_has()? to decouple KVM's capability to virtualize a feature and host's enabling a feature.
Very likely I guess.
vmcs_write64(HOST_IA32_FRED_RSP1,
read_msr(MSR_IA32_FRED_RSP1));
vmcs_write64(HOST_IA32_FRED_RSP2,
read_msr(MSR_IA32_FRED_RSP2));
vmcs_write64(HOST_IA32_FRED_RSP3,
read_msr(MSR_IA32_FRED_RSP3));
vmcs_write64(HOST_IA32_FRED_SSP1,
read_msr(MSR_IA32_FRED_SSP1));
vmcs_write64(HOST_IA32_FRED_SSP2,
read_msr(MSR_IA32_FRED_SSP2));
vmcs_write64(HOST_IA32_FRED_SSP3,
read_msr(MSR_IA32_FRED_SSP3));
}
+#endif
why is this hunk enclosed in #ifdef CONFIG_X86_64 while the one below isn't?
As if the compiler doesn't complain, I should NOT add it.
- if (cpu_feature_enabled(X86_FEATURE_FRED)) {
vmcs_write64(GUEST_IA32_FRED_CONFIG, 0);
vmcs_write64(GUEST_IA32_FRED_RSP1, 0);
vmcs_write64(GUEST_IA32_FRED_RSP2, 0);
vmcs_write64(GUEST_IA32_FRED_RSP3, 0);
vmcs_write64(GUEST_IA32_FRED_STKLVLS, 0);
vmcs_write64(GUEST_IA32_FRED_SSP1, 0);
vmcs_write64(GUEST_IA32_FRED_SSP2, 0);
vmcs_write64(GUEST_IA32_FRED_SSP3, 0);
- }
move this hunk to __vmx_vcpu_reset() because FRED spec says
"INIT does not change the value of the new MSRs."
Yeah, will do.