Changeset 82577 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Dec 13, 2019 11:22:58 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 135455
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/CPUMR0.cpp
r81605 r82577 270 270 * Copy MSR_IA32_ARCH_CAPABILITIES bits over into the host and guest feature 271 271 * structure and as well as the guest MSR. 272 * Note! we assume this happens after the CPUMR3Init is done, so CPUID bits are settled. 272 273 */ 273 274 pVM->cpum.s.HostFeatures.fArchRdclNo = 0; … … 284 285 && (fFeatures & X86_CPUID_FEATURE_EDX_MSR)) 285 286 { 286 uint64_t const fArchVal = ASMRdMsr(MSR_IA32_ARCH_CAPABILITIES); 287 pVM->cpum.s.GuestFeatures.fArchRdclNo 288 = pVM->cpum.s.HostFeatures.fArchRdclNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO); 289 pVM->cpum.s.GuestFeatures.fArchIbrsAll 290 = pVM->cpum.s.HostFeatures.fArchIbrsAll = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL); 291 pVM->cpum.s.GuestFeatures.fArchRsbOverride 292 = pVM->cpum.s.HostFeatures.fArchRsbOverride = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO); 293 pVM->cpum.s.GuestFeatures.fArchVmmNeedNotFlushL1d 294 = pVM->cpum.s.HostFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D); 295 pVM->cpum.s.GuestFeatures.fArchMdsNo 296 = pVM->cpum.s.HostFeatures.fArchMdsNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO); 297 298 if (pVM->cpum.s.GuestFeatures.fArchCap) 299 VMCC_FOR_EACH_VMCPU_STMT(pVM, pVCpu->cpum.s.GuestMsrs.msr.ArchCaps = fArchVal); 287 /* Host: */ 288 uint64_t fArchVal = ASMRdMsr(MSR_IA32_ARCH_CAPABILITIES); 289 pVM->cpum.s.HostFeatures.fArchRdclNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO); 290 pVM->cpum.s.HostFeatures.fArchIbrsAll = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL); 291 pVM->cpum.s.HostFeatures.fArchRsbOverride = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO); 292 pVM->cpum.s.HostFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D); 293 pVM->cpum.s.HostFeatures.fArchMdsNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO); 294 295 /* guest: */ 296 if (!pVM->cpum.s.GuestFeatures.fArchCap) 297 fArchVal = 0; 298 else if (!pVM->cpum.s.GuestFeatures.fIbrs) 299 fArchVal &= ~MSR_IA32_ARCH_CAP_F_IBRS_ALL; 300 VMCC_FOR_EACH_VMCPU_STMT(pVM, pVCpu->cpum.s.GuestMsrs.msr.ArchCaps = fArchVal); 301 pVM->cpum.s.GuestFeatures.fArchRdclNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO); 302 pVM->cpum.s.GuestFeatures.fArchIbrsAll = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL); 303 pVM->cpum.s.GuestFeatures.fArchRsbOverride = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO); 304 pVM->cpum.s.GuestFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D); 305 pVM->cpum.s.GuestFeatures.fArchMdsNo = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO); 300 306 } 301 307 else
Note:
See TracChangeset
for help on using the changeset viewer.