Changeset 28123 in vbox
- Timestamp:
- Apr 9, 2010 8:02:25 AM (15 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r28094 r28123 153 153 * where our hypervisor is currently mapped, then we'll create a #PF storm in the guest. 154 154 */ 155 if ((uErr & (X86_TRAP_PF_P | X86_TRAP_PF_RW)) == (X86_TRAP_PF_P | X86_TRAP_PF_RW)) 156 { 157 pgmLock(pVM); 158 # if PGM_SHW_TYPE == PGM_TYPE_32BIT 159 const unsigned iPDDst = pvFault >> SHW_PD_SHIFT; 160 PX86PD pPDDst = pgmShwGet32BitPDPtr(&pVCpu->pgm.s); 161 # else /* PGM_SHW_TYPE == PGM_TYPE_PAE */ 162 const unsigned iPDDst = (pvFault >> SHW_PD_SHIFT) & SHW_PD_MASK; /* pPDDst index, not used with the pool. */ 163 164 PX86PDPAE pPDDst; 165 # if PGM_GST_TYPE != PGM_TYPE_PAE 166 X86PDPE PdpeSrc; 167 168 /* Fake PDPT entry; access control handled on the page table level, so allow everything. */ 169 PdpeSrc.u = X86_PDPE_P; /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */ 170 # endif 171 rc = pgmShwSyncPaePDPtr(pVCpu, pvFault, &PdpeSrc, &pPDDst); 172 if (rc != VINF_SUCCESS) 173 { 174 pgmUnlock(pVM); 175 AssertRC(rc); 176 return rc; 177 } 178 Assert(pPDDst); 179 # endif 180 if (pPDDst->a[iPDDst].u & PGM_PDFLAGS_MAPPING) 181 { 182 pgmUnlock(pVM); 183 /* Force a CR3 sync to check for conflicts and emulate the instruction. */ 184 VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); 185 return VINF_EM_RAW_EMULATE_INSTR; 186 } 187 pgmUnlock(pVM); 155 if ( (uErr & (X86_TRAP_PF_P | X86_TRAP_PF_RW)) == (X86_TRAP_PF_P | X86_TRAP_PF_RW) 156 && MMHyperIsInsideArea(pVM, pvFault)) 157 { 158 /* Force a CR3 sync to check for conflicts and emulate the instruction. */ 159 VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); 160 return VINF_EM_RAW_EMULATE_INSTR; 188 161 } 189 162 # endif -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r27775 r28123 1150 1150 1151 1151 /* 1152 * Incremental page table updates should weigh tmore than random ones.1152 * Incremental page table updates should weigh more than random ones. 1153 1153 * (Only applies when started from offset 0) 1154 1154 */
Note:
See TracChangeset
for help on using the changeset viewer.