VirtualBox

Changeset 14597

Show
Ignore:
Timestamp:
11/25/08 21:41:40 (1 month ago)
Author:
vboxsync
Message:

Added R0 address to MMR3HyperMapHCPhys and made the MMHyperXToR0 use pvR0 for HCPhys and Locked more strickly.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/VBox/mm.h

    r14594 r14597  
    337337 * @{ */ 
    338338VMMDECL(int)        MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv); 
    339 VMMR3DECL(int)      MMR3HyperMapHCPhys(PVM pVM, void *pvHC, RTHCPHYS HCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr); 
     339VMMR3DECL(int)      MMR3HyperMapHCPhys(PVM pVM, void *pvR3, RTR0PTR pvR0, RTHCPHYS HCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr); 
    340340VMMR3DECL(int)      MMR3HyperMapGCPhys(PVM pVM, RTGCPHYS GCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr); 
    341341VMMR3DECL(int)      MMR3HyperMapMMIO2(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRegion, RTGCPHYS off, RTGCPHYS cb, const char *pszDesc, PRTRCPTR pRCPtr); 
  • trunk/src/VBox/VMM/MMHyper.cpp

    r14594 r14597  
    319319 * 
    320320 * @param   pVM         VM handle. 
    321  * @param   pvR3        Host context address of the memory. Must be page 
    322  *                      aligned! 
     321 * @param   pvR3        Ring-3 address of the memory. Must be page aligned! 
     322 * @param   pvR0        Optional ring-0 address of the memory. 
    323323 * @param   HCPhys      Host context physical address of the memory to be 
    324324 *                      mapped. Must be page aligned! 
     
    327327 * @param   pGCPtr      Where to store the GC address. 
    328328 */ 
    329 VMMR3DECL(int) MMR3HyperMapHCPhys(PVM pVM, void *pvR3, RTHCPHYS HCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr) 
    330 { 
    331     LogFlow(("MMR3HyperMapHCPhys: pvR3=%p HCPhys=%RHp cb=%d pszDesc=%p:{%s} pGCPtr=%p\n", pvR3, HCPhys, (int)cb, pszDesc, pszDesc, pGCPtr)); 
     329VMMR3DECL(int) MMR3HyperMapHCPhys(PVM pVM, void *pvR3, RTR0PTR pvR0, RTHCPHYS HCPhys, size_t cb, const char *pszDesc, PRTGCPTR pGCPtr) 
     330{ 
     331    LogFlow(("MMR3HyperMapHCPhys: pvR3=%p pvR0=%p HCPhys=%RHp cb=%d pszDesc=%p:{%s} pGCPtr=%p\n", pvR3, pvR0, HCPhys, (int)cb, pszDesc, pszDesc, pGCPtr)); 
    332332 
    333333    /* 
     
    335335     */ 
    336336    AssertReturn(RT_ALIGN_P(pvR3, PAGE_SIZE) == pvR3, VERR_INVALID_PARAMETER); 
     337    AssertReturn(RT_ALIGN_T(pvR0, PAGE_SIZE, RTR0PTR) == pvR0, VERR_INVALID_PARAMETER); 
    337338    AssertReturn(RT_ALIGN_T(HCPhys, PAGE_SIZE, RTHCPHYS) == HCPhys, VERR_INVALID_PARAMETER); 
    338339    AssertReturn(pszDesc && *pszDesc, VERR_INVALID_PARAMETER); 
     
    350351        pLookup->enmType = MMLOOKUPHYPERTYPE_HCPHYS; 
    351352        pLookup->u.HCPhys.pvR3   = pvR3; 
     353        pLookup->u.HCPhys.pvR0   = pvR0; 
    352354        pLookup->u.HCPhys.HCPhys = HCPhys; 
    353355 
     
    10551057        { 
    10561058            case MMLOOKUPHYPERTYPE_LOCKED: 
    1057                 pHlp->pfnPrintf(pHlp, "%RGv-%RGv %RHv LOCKED  %-*s %s\n", 
     1059                pHlp->pfnPrintf(pHlp, "%RGv-%RGv %RHv %RHv LOCKED  %-*s %s\n", 
    10581060                                pLookup->off + pVM->mm.s.pvHyperAreaGC, 
    10591061                                pLookup->off + pVM->mm.s.pvHyperAreaGC + pLookup->cb, 
    10601062                                pLookup->u.Locked.pvR3, 
     1063                                pLookup->u.Locked.pvR0, 
    10611064                                sizeof(RTHCPTR) * 2, 
    10621065                                pLookup->u.Locked.pLockedMem->eType == MM_LOCKED_TYPE_HYPER_NOFREE  ? "nofree" 
     
    10691072 
    10701073            case MMLOOKUPHYPERTYPE_HCPHYS: 
    1071                 pHlp->pfnPrintf(pHlp, "%RGv-%RGv %RHv HCPHYS  %RHp %s\n", 
     1074                pHlp->pfnPrintf(pHlp, "%RGv-%RGv %RHv %RHv HCPHYS  %RHp %s\n", 
    10721075                                pLookup->off + pVM->mm.s.pvHyperAreaGC, 
    10731076                                pLookup->off + pVM->mm.s.pvHyperAreaGC + pLookup->cb, 
    1074                                 pLookup->u.HCPhys.pvR3, pLookup->u.HCPhys.HCPhys, 
     1077                                pLookup->u.HCPhys.pvR3, 
     1078                                pLookup->u.HCPhys.pvR0, 
     1079                                pLookup->u.HCPhys.HCPhys, 
    10751080                                pLookup->pszDesc); 
    10761081                break; 
     
    10801085                                pLookup->off + pVM->mm.s.pvHyperAreaGC, 
    10811086                                pLookup->off + pVM->mm.s.pvHyperAreaGC + pLookup->cb, 
    1082                                 sizeof(RTHCPTR) * 2, "", 
     1087                                sizeof(RTHCPTR) * 2 * 2 + 1, "", 
    10831088                                pLookup->u.GCPhys.GCPhys, RT_ABS((int)(sizeof(RTHCPHYS) - sizeof(RTGCPHYS))) * 2, "", 
    10841089                                pLookup->pszDesc); 
     
    10891094                                pLookup->off + pVM->mm.s.pvHyperAreaGC, 
    10901095                                pLookup->off + pVM->mm.s.pvHyperAreaGC + pLookup->cb, 
    1091                                 sizeof(RTHCPTR) * 2, "", 
     1096                                sizeof(RTHCPTR) * 2 * 2 + 1, "", 
    10921097                                pLookup->u.MMIO2.off, RT_ABS((int)(sizeof(RTHCPHYS) - sizeof(RTGCPHYS))) * 2, "", 
    10931098                                pLookup->pszDesc); 
     
    10981103                                pLookup->off + pVM->mm.s.pvHyperAreaGC, 
    10991104                                pLookup->off + pVM->mm.s.pvHyperAreaGC + pLookup->cb, 
    1100                                 sizeof(RTHCPTR) * 2, "", 
     1105                                sizeof(RTHCPTR) * 2 * 2 + 1, "", 
    11011106                                sizeof(RTHCPTR) * 2, "", 
    11021107                                pLookup->pszDesc); 
  • trunk/src/VBox/VMM/MMInternal.h

    r14589 r14597  
    636636        struct 
    637637        { 
    638             /** Host context pointer. */ 
     638            /** Host context ring-3 pointer. */ 
    639639            R3PTRTYPE(void *)       pvR3; 
    640             /** Host context ring-0 pointer. */ 
    641             /** @todo #1865: Check if this actually works (doubt it) */ 
     640            /** Host context ring-0 pointer. Optional. */ 
    642641            RTR0PTR                 pvR0; 
    643642            /** Pointer to the locked mem record. */ 
     
    648647        struct 
    649648        { 
    650             /** Host context pointer. */ 
     649            /** Host context ring-3 pointer. */ 
    651650            R3PTRTYPE(void *)       pvR3; 
    652             /** @todo #1865: Add a pvR0 here! */ 
    653             /** HC physical address corresponding to pvR3. */ 
     651            /** Host context ring-0 pointer. Optional. */ 
     652            RTR0PTR                 pvR0; 
     653            /** HC physical address corresponding to pvR3/pvR0. */ 
    654654            RTHCPHYS                HCPhys; 
    655655        } HCPhys; 
  • trunk/src/VBox/VMM/TM.cpp

    r13830 r14597  
    217217 
    218218    RTGCPTR GCPtr; 
    219     rc = MMR3HyperMapHCPhys(pVM, pVM->tm.s.pvGIPR3, HCPhysGIP, PAGE_SIZE, "GIP", &GCPtr); 
     219    rc = MMR3HyperMapHCPhys(pVM, pVM->tm.s.pvGIPR3, NIL_RTR0PTR, HCPhysGIP, PAGE_SIZE, "GIP", &GCPtr); 
    220220    if (RT_FAILURE(rc)) 
    221221    { 
  • trunk/src/VBox/VMM/VMMAll/MMAll.cpp

    r13832 r14597  
    219219            if (pLookup->u.Locked.pvR0) 
    220220                return (RTR0PTR)((RTR0UINTPTR)pLookup->u.Locked.pvR0 + off); 
    221             /** @todo #1865: accessing ring-3 memory (LOCKED)! */ 
     221#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE /** @todo make NIL_RTR0PTR default! */ 
     222            return NIL_RTR0PTR; 
     223#else 
    222224            return (RTR0PTR)((RTR3UINTPTR)pLookup->u.Locked.pvR3 + off); 
     225#endif 
     226 
    223227        case MMLOOKUPHYPERTYPE_HCPHYS: 
    224             /** @todo #1865: accessing ring-3 memory (HCPHYS)! */ 
    225             return (RTR0PTR)((RTR3UINTPTR)pLookup->u.HCPhys.pvR3 + off); 
     228            if (pLookup->u.HCPhys.pvR0) 
     229                return (RTR0PTR)((RTR0UINTPTR)pLookup->u.HCPhys.pvR0 + off); 
     230            return NIL_RTR0PTR; 
    226231        default: 
    227232            AssertMsgFailed(("enmType=%d\n", pLookup->enmType)); 
  • trunk/src/VBox/VMM/VMMSwitcher.cpp

    r14167 r14597  
    180180         */ 
    181181        RTGCPTR GCPtr; 
    182         rc = MMR3HyperMapHCPhys(pVM, pVM->vmm.s.pvCoreCodeR3, pVM->vmm.s.HCPhysCoreCode, cbCoreCode, "Core Code", &GCPtr); 
     182        rc = MMR3HyperMapHCPhys(pVM, pVM->vmm.s.pvCoreCodeR3, pVM->vmm.s.pvCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, 
     183                                cbCoreCode, "Core Code", &GCPtr); 
    183184        if (RT_SUCCESS(rc)) 
    184185        { 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy