Changeset 38707 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Sep 9, 2011 2:10:18 PM (13 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r37452 r38707 1624 1624 #endif 1625 1625 1626 /** 1627 * Gets the specified page directory pointer table entry. 1628 * 1629 * @returns PDP entry 1630 * @param pVCpu VMCPU handle. 1631 * @param iPdpt PDPT index 1632 */ 1633 VMMDECL(int) PGMGstQueryPaePDPtr(PVMCPU pVCpu, unsigned iPdpt, PX86PDPE pPdpe) 1634 { 1635 Assert(iPdpt <= 3); 1636 PX86PDPT pPdpt; 1637 int rc = pgmGstGetPaePDPTPtrEx(pVCpu, &pPdpt); 1638 if (RT_SUCCESS(rc)) 1639 *pPdpe = pPdpt->a[iPdpt & 3]; 1640 return rc; 1626 1627 /** 1628 * Gets the PAE PDPEs values cached by the CPU. 1629 * 1630 * @returns VBox status code. 1631 * @param pVCpu The virtual CPU. 1632 * @param paPdpes Where to return the four PDPEs. The array 1633 * pointed to must have 4 entries. 1634 */ 1635 VMM_INT_DECL(int) PGMGstGetPaePdpes(PVMCPU pVCpu, PX86PDPE paPdpes) 1636 { 1637 Assert(pVCpu->pgm.s.enmShadowMode == PGMMODE_EPT); 1638 1639 paPdpes[0] = pVCpu->pgm.s.aGstPaePdpeRegs[0]; 1640 paPdpes[1] = pVCpu->pgm.s.aGstPaePdpeRegs[1]; 1641 paPdpes[2] = pVCpu->pgm.s.aGstPaePdpeRegs[2]; 1642 paPdpes[3] = pVCpu->pgm.s.aGstPaePdpeRegs[3]; 1643 return VINF_SUCCESS; 1644 } 1645 1646 1647 /** 1648 * Sets the PAE PDPEs values cached by the CPU. 1649 * 1650 * @remarks This must be called *AFTER* PGMUpdateCR3. 1651 * 1652 * @returns VBox status code. 1653 * @param pVCpu The virtual CPU. 1654 * @param paPdpes The four PDPE values. The array pointed to 1655 * must have exactly 4 entries. 1656 */ 1657 VMM_INT_DECL(int) PGMGstUpdatePaePdpes(PVMCPU pVCpu, PCX86PDPE paPdpes) 1658 { 1659 Assert(pVCpu->pgm.s.enmShadowMode == PGMMODE_EPT); 1660 1661 for (unsigned i = 0; i < RT_ELEMENTS(pVCpu->pgm.s.aGstPaePdpeRegs); i++) 1662 { 1663 if (pVCpu->pgm.s.aGstPaePdpeRegs[i].u != paPdpes[i].u) 1664 { 1665 pVCpu->pgm.s.aGstPaePdpeRegs[i] = paPdpes[i]; 1666 1667 /* Force lazy remapping if it changed in any way. */ 1668 pVCpu->pgm.s.apGstPaePDsR3[i] = 0; 1669 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 1670 pVCpu->pgm.s.apGstPaePDsR0[i] = 0; 1671 # endif 1672 pVCpu->pgm.s.apGstPaePDsRC[i] = 0; 1673 pVCpu->pgm.s.aGCPhysGstPaePDs[i] = NIL_RTGCPHYS; 1674 } 1675 } 1676 return VINF_SUCCESS; 1641 1677 } 1642 1678 -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r38086 r38707 4459 4459 for (unsigned i = 0; i < X86_PG_PAE_PDPE_ENTRIES; i++, GCPtr += PAGE_SIZE) 4460 4460 { 4461 pVCpu->pgm.s.aGstPaePdpeRegs[i].u = pGuestPDPT->a[i].u; 4461 4462 if (pGuestPDPT->a[i].n.u1Present) 4462 4463 {
Note:
See TracChangeset
for help on using the changeset viewer.