VirtualBox

Changeset 14597 in vbox for trunk


Ignore:
Timestamp:
Nov 25, 2008 8:41:40 PM (16 years ago)
Author:
vboxsync
Message:

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

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • 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        {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette