Changeset 5040 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Sep 26, 2007 9:03:00 AM (17 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/CPUM.cpp
r4958 r5040 1514 1514 /** Pointer to the current page - GC Ptr. */ 1515 1515 RTGCPTR pvPageGC; 1516 /** The lock information that PGMPhysReleasePageMappingLock needs. */ 1517 PGMPAGEMAPLOCK pageMapLock; 1516 1518 } CPUMDISASSTATE, *PCPUMDISASSTATE; 1517 1519 … … 1552 1554 } 1553 1555 else 1554 rc = PGMPhysGCPtr2HCPtr(pState->pVM, pState->pvPageGC, &pState->pvPageHC); 1556 { 1557 /* Release mapping lock previously acquired. */ 1558 if (PGMPhysIsPageMappingLockValid(pState->pVM, &pState->pageMapLock)) 1559 PGMPhysReleasePageMappingLock(pState->pVM, &pState->pageMapLock); 1560 1561 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageHC, &pState->pageMapLock); 1562 } 1555 1563 if (VBOX_FAILURE(rc)) 1556 1564 { … … 1674 1682 Log(("%s", szOutput)); 1675 1683 #endif 1676 return VINF_SUCCESS; 1677 } 1678 1679 Log(("CPUMR3DisasmInstrCPU: DISInstr failed for %04X:%VGv rc=%Vrc\n", pCtx->cs, GCPtrPC, rc)); 1684 rc = VINF_SUCCESS; 1685 } 1686 else 1687 Log(("CPUMR3DisasmInstrCPU: DISInstr failed for %04X:%VGv rc=%Vrc\n", pCtx->cs, GCPtrPC, rc)); 1688 1689 /* Release mapping lock acquired in cpumR3DisasInstrRead. */ 1690 if (PGMPhysIsPageMappingLockValid(pVM, &State.pageMapLock)) 1691 PGMPhysReleasePageMappingLock(pVM, &State.pageMapLock); 1692 1680 1693 return rc; 1681 1694 } -
trunk/src/VBox/VMM/DBGFDisas.cpp
r4953 r5040 67 67 /** Pointer to the next instruction (relative to GCPtrSegBase). */ 68 68 RTGCUINTPTR GCPtrNext; 69 /** The lock information that PGMPhysReleasePageMappingLock needs. */ 70 PGMPAGEMAPLOCK pageMapLock; 69 71 } DBGFDISASSTATE, *PDBGFDISASSTATE; 70 72 … … 95 97 uint32_t cbInstr; 96 98 int rc = DISInstr(&pState->Cpu, GCPtr, 0, &cbInstr, NULL); 99 100 /* Release mapping lock acquired in dbgfR3DisasInstrRead */ 101 if (PGMPhysIsPageMappingLockValid(pVM, &pState->pageMapLock)) 102 PGMPhysReleasePageMappingLock(pVM, &pState->pageMapLock); 103 97 104 if (VBOX_SUCCESS(rc)) 98 105 { … … 159 166 rc = VERR_INVALID_POINTER; 160 167 } 161 else if (pState->enmMode <= PGMMODE_PROTECTED) 162 rc = PGMPhysGCPhys2HCPtr(pState->pVM, pState->pvPageGC, PAGE_SIZE, &pState->pvPageHC); 163 else 164 rc = PGMPhysGCPtr2HCPtr(pState->pVM, pState->pvPageGC, &pState->pvPageHC); 168 else 169 { 170 if (PGMPhysIsPageMappingLockValid(pState->pVM, &pState->pageMapLock)) 171 PGMPhysReleasePageMappingLock(pState->pVM, &pState->pageMapLock); 172 173 if (pState->enmMode <= PGMMODE_PROTECTED) 174 rc = PGMPhysGCPhys2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageHC, &pState->pageMapLock); 175 else 176 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageHC, &pState->pageMapLock); 177 } 165 178 if (VBOX_FAILURE(rc)) 166 179 { … … 539 552 rc = dbgfR3DisasInstrRead(GCPtr, pau8Bits, cbBits, &State); 540 553 AssertRC(rc); 554 555 /* Release mapping lock acquired in dbgfR3DisasInstrRead */ 556 if (PGMPhysIsPageMappingLockValid(pVM, &State.pageMapLock)) 557 PGMPhysReleasePageMappingLock(pVM, &State.pageMapLock); 558 541 559 if (fFlags & DBGF_DISAS_FLAGS_NO_ADDRESS) 542 560 RTStrPrintf(pszOutput, cchOutput, "%.*Vhxs%*s %s", -
trunk/src/VBox/VMM/PDMDevice.cpp
r4787 r5040 143 143 static DECLCALLBACK(int) pdmR3DevHlp_PhysWriteGCVirt(PPDMDEVINS pDevIns, RTGCPTR GCVirtDst, const void *pvSrc, size_t cb); 144 144 static DECLCALLBACK(int) pdmR3DevHlp_PhysReserve(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, const char *pszDesc); 145 static DECLCALLBACK(int) pdmR3DevHlp_Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC);146 145 static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPtr2GCPhys(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTGCPHYS pGCPhys); 147 static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr);148 146 static DECLCALLBACK(bool) pdmR3DevHlp_A20IsEnabled(PPDMDEVINS pDevIns); 149 147 static DECLCALLBACK(void) pdmR3DevHlp_A20Set(PPDMDEVINS pDevIns, bool fEnable); … … 177 175 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_PhysWriteGCVirt(PPDMDEVINS pDevIns, RTGCPTR GCVirtDst, const void *pvSrc, size_t cb); 178 176 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_PhysReserve(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, const char *pszDesc); 179 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC); 180 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr); 177 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_Obsolete_Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC); 178 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_Obsolete_PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr); 179 181 180 static DECLCALLBACK(bool) pdmR3DevHlp_Untrusted_A20IsEnabled(PPDMDEVINS pDevIns); 182 181 static DECLCALLBACK(void) pdmR3DevHlp_Untrusted_A20Set(PPDMDEVINS pDevIns, bool fEnable); … … 341 340 pdmR3DevHlp_PhysWriteGCVirt, 342 341 pdmR3DevHlp_PhysReserve, 343 pdmR3DevHlp_ Phys2HCVirt,344 pdmR3DevHlp_ PhysGCPtr2HCPtr,342 pdmR3DevHlp_Untrusted_Obsolete_Phys2HCVirt, 343 pdmR3DevHlp_Untrusted_Obsolete_PhysGCPtr2HCPtr, 345 344 pdmR3DevHlp_A20IsEnabled, 346 345 pdmR3DevHlp_A20Set, … … 430 429 pdmR3DevHlp_Untrusted_PhysWriteGCVirt, 431 430 pdmR3DevHlp_Untrusted_PhysReserve, 432 pdmR3DevHlp_Untrusted_ Phys2HCVirt,433 pdmR3DevHlp_Untrusted_ PhysGCPtr2HCPtr,431 pdmR3DevHlp_Untrusted_Obsolete_Phys2HCVirt, 432 pdmR3DevHlp_Untrusted_Obsolete_PhysGCPtr2HCPtr, 434 433 pdmR3DevHlp_Untrusted_A20IsEnabled, 435 434 pdmR3DevHlp_Untrusted_A20Set, … … 3268 3267 } 3269 3268 3270 3271 /** @copydoc PDMDEVHLP::pfnPhys2HCVirt */3272 static DECLCALLBACK(int) pdmR3DevHlp_Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC)3273 {3274 PDMDEV_ASSERT_DEVINS(pDevIns);3275 PVM pVM = pDevIns->Internal.s.pVMHC;3276 VM_ASSERT_EMT(pVM);3277 LogFlow(("pdmR3DevHlp_Phys2HCVirt: caller='%s'/%d: GCPhys=%VGp cbRange=%#x ppvHC=%p\n",3278 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, GCPhys, cbRange, ppvHC));3279 3280 if (!VM_IS_EMT(pVM))3281 return VERR_ACCESS_DENIED;3282 3283 int rc = PGMPhysGCPhys2HCPtr(pVM, GCPhys, cbRange, ppvHC);3284 3285 LogFlow(("pdmR3DevHlp_Phys2HCVirt: caller='%s'/%d: returns %Vrc *ppvHC=%p\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, rc, *ppvHC));3286 3287 return rc;3288 }3289 3290 3291 /** @copydoc PDMDEVHLP::pfnPhysGCPtr2HCPtr */3292 static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr)3293 {3294 PDMDEV_ASSERT_DEVINS(pDevIns);3295 PVM pVM = pDevIns->Internal.s.pVMHC;3296 VM_ASSERT_EMT(pVM);3297 LogFlow(("pdmR3DevHlp_PhysGCPtr2HCPtr: caller='%s'/%d: GCPtr=%VGv pHCPtr=%p\n",3298 pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, GCPtr, pHCPtr));3299 3300 if (!VM_IS_EMT(pVM))3301 return VERR_ACCESS_DENIED;3302 3303 int rc = PGMPhysGCPtr2HCPtr(pVM, GCPtr, pHCPtr);3304 3305 LogFlow(("pdmR3DevHlp_PhysGCPtr2HCPtr: caller='%s'/%d: returns %Vrc *pHCPtr=%p\n", pDevIns->pDevReg->szDeviceName, pDevIns->iInstance, rc, *pHCPtr));3306 3307 return rc;3308 }3309 3310 3269 /** @copydoc PDMDEVHLP::pfnPhysGCPtr2GCPhys */ 3311 3270 static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPtr2GCPhys(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTGCPHYS pGCPhys) … … 3769 3728 3770 3729 /** @copydoc PDMDEVHLP::pfnPhys2HCVirt */ 3771 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_ Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC)3730 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_Obsolete_Phys2HCVirt(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR ppvHC) 3772 3731 { 3773 3732 PDMDEV_ASSERT_DEVINS(pDevIns); … … 3781 3740 3782 3741 /** @copydoc PDMDEVHLP::pfnPhysGCPtr2HCPtr */ 3783 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_ PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr)3742 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_Obsolete_PhysGCPtr2HCPtr(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTHCPTR pHCPtr) 3784 3743 { 3785 3744 PDMDEV_ASSERT_DEVINS(pDevIns); … … 3789 3748 return VERR_ACCESS_DENIED; 3790 3749 } 3791 3792 3750 3793 3751 /** @copydoc PDMDEVHLP::pfnA20IsEnabled */ -
trunk/src/VBox/VMM/PGMInternal.h
r5017 r5040 3093 3093 } 3094 3094 3095 3096 #if 03097 /** Soon to be obsolete conversion functions */3098 3099 /**3100 * Converts a GC physical address to a HC pointer.3101 *3102 * @returns VINF_SUCCESS on success.3103 * @returns VERR_PGM_PHYS_PAGE_RESERVED it it's a valid GC physical3104 * page but has no physical backing.3105 * @returns VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid3106 * GC physical address.3107 * @param pVM The VM handle.3108 * @param GCPhys The GC physical address to convert.3109 * @param cbRange Physical range3110 * @param pHCPtr Where to store the HC pointer on success.3111 */3112 PGMDECL(int) PGMPhysGCPhys2HCPtr(PVM pVM, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR pHCPtr);3113 3114 /**3115 * Converts a guest pointer to a HC pointer.3116 *3117 * This uses the current CR3/CR0/CR4 of the guest.3118 *3119 * @returns VBox status code.3120 * @param pVM The VM Handle3121 * @param GCPtr The guest pointer to convert.3122 * @param pHCPtr Where to store the HC virtual address.3123 */3124 PGMDECL(int) PGMPhysGCPtr2HCPtr(PVM pVM, RTGCPTR GCPtr, PRTHCPTR pHCPtr);3125 3126 /**3127 * Converts a guest virtual address to a HC pointer by specfied CR3 and flags.3128 *3129 * @returns VBox status code.3130 * @param pVM The VM Handle3131 * @param GCPtr The guest pointer to convert.3132 * @param cr3 The guest CR3.3133 * @param fFlags Flags used for interpreting the PD correctly: X86_CR4_PSE and X86_CR4_PAE3134 * @param pHCPtr Where to store the HC pointer.3135 *3136 * @remark This function is used by the REM at a time where PGM could3137 * potentially not be in sync. It could also be used by a3138 * future DBGF API to cpu state independent conversions.3139 */3140 PGMDECL(int) PGMPhysGCPtr2HCPtrByGstCR3(PVM pVM, RTGCPTR GCPtr, uint32_t cr3, unsigned fFlags, PRTHCPTR pHCPtr);3141 #endif3142 3143 3095 /** @} */ 3144 3096 -
trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
r4811 r5040 759 759 PGMDECL(int) PGMPhysGCPhys2HCPtr(PVM pVM, RTGCPHYS GCPhys, RTUINT cbRange, PRTHCPTR pHCPtr) 760 760 { 761 #ifdef NEW_PHYS_CODE 762 VM_ASSERT_EMT(pVM); /* no longer safe for use outside the EMT thread! */ 763 #endif 764 761 765 #ifdef PGM_DYNAMIC_RAM_ALLOC 762 766 if ((GCPhys & PGM_DYNAMIC_CHUNK_BASE_MASK) != ((GCPhys+cbRange-1) & PGM_DYNAMIC_CHUNK_BASE_MASK)) … … 850 854 PGMDECL(int) PGMPhysGCPtr2HCPtr(PVM pVM, RTGCPTR GCPtr, PRTHCPTR pHCPtr) 851 855 { 856 #ifdef NEW_PHYS_CODE 857 VM_ASSERT_EMT(pVM); /* no longer safe for use outside the EMT thread! */ 858 #endif 859 852 860 RTGCPHYS GCPhys; 853 861 int rc = PGM_GST_PFN(GetPage,pVM)(pVM, (RTGCUINTPTR)GCPtr, NULL, &GCPhys); … … 874 882 PGMDECL(int) PGMPhysGCPtr2HCPtrByGstCR3(PVM pVM, RTGCPTR GCPtr, uint32_t cr3, unsigned fFlags, PRTHCPTR pHCPtr) 875 883 { 884 #ifdef NEW_PHYS_CODE 885 VM_ASSERT_EMT(pVM); /* no longer safe for use outside the EMT thread! */ 886 #endif 876 887 /* 877 888 * PAE or 32-bit?
Note:
See TracChangeset
for help on using the changeset viewer.