Changeset 13167 in vbox
- Timestamp:
- Oct 10, 2008 11:43:42 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 37687
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r13139 r13167 2279 2279 Assert(pVM->hwaccm.s.fNestedPaging); 2280 2280 2281 if ((exitQualification & (VMX_EXIT_QUALIFICATION_EPT_GUEST_ADDR_VALID | VMX_EXIT_QUALIFICATION_EPT_TRANSLATED_ACCESS)) 2282 == (VMX_EXIT_QUALIFICATION_EPT_GUEST_ADDR_VALID | VMX_EXIT_QUALIFICATION_EPT_TRANSLATED_ACCESS)) 2283 { 2284 /* Read the fault address. */ 2285 rc = VMXReadVMCS(VMX_VMCS_EXIT_GUEST_LINEAR_ADDR, &val); 2286 AssertRC(rc); 2287 GCPhys = val; 2288 } 2289 else 2290 { 2291 Assert(!(pCtx->cr0 & X86_CR0_PG) || (pCtx->cr4 & X86_CR4_PAE)); 2292 2293 /* If not set, then the violation occurred when loading the PDPTEs as part of a mov cr3 instruction 2294 * or while accessing our real & protected mode without paging page directory. 2295 */ 2296 if (!(pCtx->cr0 & X86_CR0_PG)) 2297 { 2298 /* We convert it here every time as pci regions could be reconfigured. */ 2299 rc = PDMVMMDevHeapR3ToGCPhys(pVM, pVM->hwaccm.s.vmx.pRealModeEPTPageTable, &GCPhys); 2300 AssertRC(rc); 2301 } 2302 else 2303 { 2304 /* It applies to the guest's CR3. */ 2305 GCPhys = pCtx->cr3; 2306 } 2307 } 2281 #if HC_ARCH_BITS == 64 2282 rc = VMXReadVMCS(VMX_VMCS_EXIT_PHYS_ADDR_FULL, &GCPhys); 2283 AssertRC(rc); 2284 #else 2285 rc = VMXReadVMCS(VMX_VMCS_EXIT_PHYS_ADDR_FULL, &val); 2286 AssertRC(rc); 2287 GCPhys = val; 2288 rc = VMXReadVMCS(VMX_VMCS_EXIT_PHYS_ADDR_HIGH, &val); 2289 GCPhys |= (val << 32ULL); 2290 #endif 2308 2291 2309 2292 /* Determine the kind of violation. */
Note:
See TracChangeset
for help on using the changeset viewer.