Changeset 760 in vbox
- Timestamp:
- Feb 7, 2007 6:29:33 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18421
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r758 r760 72 72 73 73 bool csamIsCodeScanned(PVM pVM, RTGCPTR pInstr, PCSAMPAGE *pPage); 74 int csamR3FlushPageRecord(PVM pVM, PCSAMPAGE pPage);75 74 int csamR3CheckPageRecord(PVM pVM, RTGCPTR pInstr); 76 75 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false); … … 1388 1387 1389 1388 /** 1390 * Flush a page record1391 *1392 * @returns VBox status code. (trap handled or not)1393 * @param pVM The VM to operate on.1394 * @param pPage Page record ptr1395 */1396 int csamR3FlushPageRecord(PVM pVM, PCSAMPAGE pPage)1397 {1398 RTGCPHYS oldPhys = pPage->GCPhys;1399 Log(("csamR3FlushPageRecord: page %VGv has changed -> FLUSH\n", pPage->pPageGC));1400 1401 int rc = PGMGstGetPage(pVM, pPage->pPageGC, &pPage->fFlags, &pPage->GCPhys);1402 AssertMsg(VBOX_SUCCESS(rc) || rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT, ("rc = %Vrc\n", rc));1403 1404 Log(("Old GCPhys %VGp new %VGp\n", oldPhys, pPage->GCPhys));1405 if (pPage->pBitmap == NULL)1406 {1407 pPage->pBitmap = (uint8_t *)MMR3HeapAllocZ(pVM, MM_TAG_CSAM_PATCH, CSAM_PAGE_BITMAP_SIZE);1408 Assert(pPage->pBitmap);1409 if (pPage->pBitmap == NULL)1410 {1411 return VERR_NO_MEMORY;1412 }1413 }1414 else1415 {1416 memset(pPage->pBitmap, 0, CSAM_PAGE_BITMAP_SIZE);1417 }1418 pPage->u64Hash = csamR3CalcPageHash(pVM, pPage->pPageGC);1419 1420 return VINF_SUCCESS;1421 }1422 1423 /**1424 1389 * Notify CSAM of a page flush 1425 1390 * … … 1501 1466 if (rc == VINF_SUCCESS) 1502 1467 pPageRec->page.u64Hash = csamR3CalcPageHash(pVM, addr); 1468 1469 if (pPageRec->page.pBitmap == NULL) 1470 { 1471 pPageRec->page.pBitmap = (uint8_t *)MMR3HeapAllocZ(pVM, MM_TAG_CSAM_PATCH, CSAM_PAGE_BITMAP_SIZE); 1472 Assert(pPageRec->page.pBitmap); 1473 if (pPageRec->page.pBitmap == NULL) 1474 return VERR_NO_MEMORY; 1475 } 1476 else 1477 memset(pPageRec->page.pBitmap, 0, CSAM_PAGE_BITMAP_SIZE); 1503 1478 } 1504 1479 … … 1550 1525 u64hash = csamR3CalcPageHash(pVM, pInstrGC); 1551 1526 if (u64hash != pPageRec->page.u64Hash) 1552 { 1553 csamR3FlushPageRecord(pVM, &pPageRec->page); 1554 } 1527 csamFlushPage(pVM, pInstrGC, false /* don't remove page record */); 1555 1528 } 1556 1529 else 1557 {1558 1530 return VWRN_CSAM_PAGE_NOT_FOUND; 1559 } 1531 1560 1532 return VINF_SUCCESS; 1561 1533 }
Note:
See TracChangeset
for help on using the changeset viewer.