Changeset 23198 in vbox
- Timestamp:
- Sep 21, 2009 4:07:16 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 52635
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/HWACCMAll.cpp
r23167 r23198 146 146 } 147 147 148 149 /** 150 * Dummy RTMpOnSpecific handler since RTMpPokeCpu couldn't be used. 151 * 152 */ 153 static DECLCALLBACK(void) hwaccmFlushHandler(RTCPUID idCpu, void *pvUser1, void *pvUser2) 154 { 155 return; 156 } 157 158 148 159 /** 149 160 * Flush the TLBs of all VCPUs … … 177 188 RTCPUID idHostCpu = pVCpu->hwaccm.s.idEnteredCpu; 178 189 if (idHostCpu != NIL_RTCPUID) 179 RTMpPokeCpu(idHostCpu); 190 { 191 int rc = RTMpPokeCpu(idHostCpu); 192 # ifdef RT_OS_WINDOWS 193 AssertRC(rc); 194 # else 195 /* Not implemented on some platforms (Darwin, Linux kernel < 2.6.19); fall back to a less efficient implementation (broadcast). */ 196 if (rc == VERR_NOT_SUPPORTED) 197 RTMpOnSpecific(idHostCpu, hwaccmFlushHandler, 0, 0); 198 # endif 199 } 180 200 #else 181 201 VMR3NotifyCpuFFU(pVCpu->pUVCpu, VMNOTIFYFF_FLAGS_POKE); -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r23145 r23198 64 64 #ifdef LOG_ENABLED 65 65 static const char *pgmPoolPoolKindToStr(uint8_t enmKind); 66 #endif 67 #if defined(VBOX_STRICT) && defined(PGMPOOL_WITH_OPTIMIZED_DIRTY_PT) 68 static void pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT); 66 69 #endif 67 70 … … 1166 1169 return VINF_SUCCESS; 1167 1170 } 1171 #ifdef PGMPOOL_WITH_OPTIMIZED_DIRTY_PT 1172 if (pPage->fDirty) 1173 { 1174 Assert(VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH)); 1175 return VINF_SUCCESS; /* SMP guest case where we were blocking on the pgm lock while the same page was being marked dirty. */ 1176 } 1177 #endif 1178 1179 #if defined(VBOX_STRICT) && defined(PGMPOOL_WITH_OPTIMIZED_DIRTY_PT) 1180 if (pPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT) 1181 { 1182 void *pvShw = PGMPOOL_PAGE_2_LOCKED_PTR(pPool->CTX_SUFF(pVM), pPage); 1183 void *pvGst; 1184 int rc = PGM_GCPHYS_2_PTR(pPool->CTX_SUFF(pVM), pPage->GCPhys, &pvGst); AssertReleaseRC(rc); 1185 pgmPoolTrackCheckPTPaePae(pPool, pPage, (PX86PTPAE)pvShw, (PCX86PTPAE)pvGst); 1186 } 1187 #endif 1168 1188 1169 1189 /* … … 1181 1201 */ 1182 1202 Assert(pPage->iMonitoredPrev == NIL_PGMPOOL_IDX); 1183 Assert(!pPage->fDirty);1184 1203 1185 1204 #ifdef IN_RING0 … … 1421 1440 * @param pGstPT The guest page table. 1422 1441 */ 1423 DECLINLINE(void)pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT)1442 static void pgmPoolTrackCheckPTPaePae(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PX86PTPAE pShwPT, PCX86PTPAE pGstPT) 1424 1443 { 1425 1444 unsigned cErrors = 0;
Note:
See TracChangeset
for help on using the changeset viewer.