Changeset 41072 in vbox
- Timestamp:
- Apr 26, 2012 4:35:04 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 77640
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r40453 r41072 360 360 if (PAGE_ADDRESS(InstrGC) == PAGE_ADDRESS(InstrGC + sizeof(State.aOpcode) - 1)) 361 361 { 362 if (rc == VERR_PAGE_TABLE_NOT_PRESENT) 363 HWACCMInvalidatePage(pVCpu, InstrGC); 362 /* 363 * If we fail to find the page via the guest's page tables we invalidate the page 364 * in the host TLB (pertaining to the guest in the NestedPaging case). See #6043 365 */ 366 if (rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) 367 HWACCMInvalidatePage(pVCpu, InstrGC); 364 368 365 369 Log(("emDisCoreOne: read failed with %d\n", rc)); … … 449 453 if (PAGE_ADDRESS(GCPtrInstr) == PAGE_ADDRESS(GCPtrInstr + sizeof(State.aOpcode) - 1)) 450 454 { 451 if (rc == VERR_PAGE_TABLE_NOT_PRESENT) 452 HWACCMInvalidatePage(pVCpu, GCPtrInstr); 455 /* 456 * If we fail to find the page via the guest's page tables we invalidate the page 457 * in the host TLB (pertaining to the guest in the NestedPaging case). See #6043 458 */ 459 if (rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) 460 HWACCMInvalidatePage(pVCpu, GCPtrInstr); 453 461 454 462 Log(("EMInterpretDisasOneEx: read failed with %d\n", rc)); -
trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
r40776 r41072 1522 1522 unsigned cbOp; 1523 1523 rc = EMInterpretDisasOne(pVM, pVCpu, pCtxCore, pDis, &cbOp); 1524 AssertRC(rc);1525 1524 if (RT_FAILURE(rc)) 1526 1525 { -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r40655 r41072 1919 1919 { 1920 1920 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, enmShwPagingMode, CPUMCTX2CORE(pCtx), GCPhysFault, errCode); 1921 if (rc == VINF_SUCCESS) 1921 1922 /* 1923 * If we succeed, resume execution. 1924 * Or, if fail in interpreting the instruction because we couldn't get the guest physical address 1925 * of the page containing the instruction via the guest's page tables (we would invalidate the guest page 1926 * in the host TLB), resume execution which would cause a guest page fault to let the guest handle this 1927 * weird case. See #6043. 1928 */ 1929 if ( rc == VINF_SUCCESS 1930 || rc == VERR_PAGE_TABLE_NOT_PRESENT 1931 || rc == VERR_PAGE_NOT_PRESENT) 1922 1932 { 1923 1933 Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> resume\n", GCPhysFault, (RTGCPTR)pCtx->rip)); … … 1935 1945 rc = PGMR0Trap0eHandlerNestedPaging(pVM, pVCpu, enmShwPagingMode, errCode, CPUMCTX2CORE(pCtx), GCPhysFault); 1936 1946 Log2(("PGMR0Trap0eHandlerNestedPaging %RGv returned %Rrc\n", (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); 1937 if (rc == VINF_SUCCESS) 1947 1948 /* 1949 * Same case as PGMR0Trap0eHandlerNPMisconfig(). See comment above, #6043. 1950 */ 1951 if ( rc == VINF_SUCCESS 1952 || rc == VERR_PAGE_TABLE_NOT_PRESENT 1953 || rc == VERR_PAGE_NOT_PRESENT) 1938 1954 { /* We've successfully synced our shadow pages, so let's just continue execution. */ 1939 1955 Log2(("Shadow page fault at %RGv cr2=%RGp error code %x\n", (RTGCPTR)pCtx->rip, GCPhysFault, errCode)); -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r40832 r41072 3496 3496 rc = PGMR0Trap0eHandlerNestedPaging(pVM, pVCpu, PGMMODE_EPT, errCode, CPUMCTX2CORE(pCtx), GCPhys); 3497 3497 Log2(("PGMR0Trap0eHandlerNestedPaging %RGv returned %Rrc\n", (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); 3498 3499 /* 3500 * Note! We probably should handle failure to get the instruction page (VERR_PAGE_NOT_PRESENT, 3501 * VERR_PAGE_TABLE_NOT_PRESENT). See #6043. 3502 */ 3498 3503 if (rc == VINF_SUCCESS) 3499 3504 { /* We've successfully synced our shadow pages, so let's just continue execution. */ … … 3542 3547 3543 3548 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, PGMMODE_EPT, CPUMCTX2CORE(pCtx), GCPhys, UINT32_MAX); 3549 3550 /* 3551 * Note! We probably should handle failure to get the instruction page (VERR_PAGE_NOT_PRESENT, 3552 * VERR_PAGE_TABLE_NOT_PRESENT). See #6043. 3553 */ 3544 3554 if (rc == VINF_SUCCESS) 3545 3555 { … … 4434 4444 Log2(("VMXR0InvalidatePage %RGv\n", GCVirt)); 4435 4445 4436 /* Only relevant if we want to use VPID. 4446 /* Only relevant if we want to use VPID as otherwise every VMX transition 4447 * will flush the TLBs and paging-structure caches. 4437 4448 * In the nested paging case we still see such calls, but 4438 4449 * can safely ignore them. (e.g. after cr3 updates)
Note:
See TracChangeset
for help on using the changeset viewer.