Changeset 23765 in vbox
- Timestamp:
- Oct 14, 2009 2:48:30 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r23016 r23765 102 102 #endif 103 103 104 /** 105 * SSM descriptor table for the CSAM structure. 106 */ 107 static const SSMFIELD g_aCsamFields[] = 108 { 109 SSMFIELD_ENTRY_IGNORE( CSAM, offVM), 110 SSMFIELD_ENTRY_PAD_HC64( CSAM, Alignment0, sizeof(uint32_t)), 111 SSMFIELD_ENTRY_HCPTR( CSAM, pPageTree), 112 SSMFIELD_ENTRY( CSAM, aDangerousInstr), 113 SSMFIELD_ENTRY( CSAM, cDangerousInstr), 114 SSMFIELD_ENTRY( CSAM, iDangerousInstr), 115 SSMFIELD_ENTRY_RCPTR( CSAM, pPDBitmapGC), 116 SSMFIELD_ENTRY_RCPTR( CSAM, pPDHCBitmapGC), 117 SSMFIELD_ENTRY_HCPTR( CSAM, pPDBitmapHC), 118 SSMFIELD_ENTRY_HCPTR( CSAM, pPDGCBitmapHC), 119 SSMFIELD_ENTRY_HCPTR( CSAM, savedstate.pSSM), 120 SSMFIELD_ENTRY( CSAM, savedstate.cPageRecords), 121 SSMFIELD_ENTRY( CSAM, savedstate.cPatchPageRecords), 122 SSMFIELD_ENTRY( CSAM, cDirtyPages), 123 SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvDirtyBasePage), 124 SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvDirtyFaultPage), 125 SSMFIELD_ENTRY( CSAM, cPossibleCodePages), 126 SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvPossibleCodePage), 127 SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvCallInstruction), 128 SSMFIELD_ENTRY( CSAM, iCallInstruction), 129 SSMFIELD_ENTRY( CSAM, fScanningStarted), 130 SSMFIELD_ENTRY( CSAM, fGatesChecked), 131 SSMFIELD_ENTRY_PAD_HC( CSAM, Alignment1, 4, 2), 132 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrTraps), 133 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrPages), 134 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrPagesInv), 135 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrRemovedPages), 136 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrPatchPages), 137 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrPageNPHC), 138 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrPageNPGC), 139 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrFlushes), 140 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrFlushesSkipped), 141 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrKnownPagesHC), 142 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrKnownPagesGC), 143 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrInstr), 144 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrBytesRead), 145 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrOpcodeRead), 146 SSMFIELD_ENTRY_IGNORE( CSAM, StatTime), 147 SSMFIELD_ENTRY_IGNORE( CSAM, StatTimeCheckAddr), 148 SSMFIELD_ENTRY_IGNORE( CSAM, StatTimeAddrConv), 149 SSMFIELD_ENTRY_IGNORE( CSAM, StatTimeFlushPage), 150 SSMFIELD_ENTRY_IGNORE( CSAM, StatTimeDisasm), 151 SSMFIELD_ENTRY_IGNORE( CSAM, StatFlushDirtyPages), 152 SSMFIELD_ENTRY_IGNORE( CSAM, StatCheckGates), 153 SSMFIELD_ENTRY_IGNORE( CSAM, StatCodePageModified), 154 SSMFIELD_ENTRY_IGNORE( CSAM, StatDangerousWrite), 155 SSMFIELD_ENTRY_IGNORE( CSAM, StatInstrCacheHit), 156 SSMFIELD_ENTRY_IGNORE( CSAM, StatInstrCacheMiss), 157 SSMFIELD_ENTRY_IGNORE( CSAM, StatPagePATM), 158 SSMFIELD_ENTRY_IGNORE( CSAM, StatPageCSAM), 159 SSMFIELD_ENTRY_IGNORE( CSAM, StatPageREM), 160 SSMFIELD_ENTRY_IGNORE( CSAM, StatNrUserPages), 161 SSMFIELD_ENTRY_IGNORE( CSAM, StatPageMonitor), 162 SSMFIELD_ENTRY_IGNORE( CSAM, StatPageRemoveREMFlush), 163 SSMFIELD_ENTRY_IGNORE( CSAM, StatBitmapAlloc), 164 SSMFIELD_ENTRY_IGNORE( CSAM, StatScanNextFunction), 165 SSMFIELD_ENTRY_IGNORE( CSAM, StatScanNextFunctionFailed), 166 SSMFIELD_ENTRY_TERM() 167 }; 168 169 /** Fake type to simplify g_aCsamPDBitmapArray construction. */ 170 typedef struct 171 { 172 uint8_t *a[CSAM_PGDIRBMP_CHUNKS]; 173 } CSAMPDBITMAPARRAY; 174 175 /** 176 * SSM descriptor table for the CSAM::pPDBitmapHC array. 177 */ 178 static SSMFIELD const g_aCsamPDBitmapArray[] = 179 { 180 SSMFIELD_ENTRY_HCPTR_NI_ARRAY(CSAMPDBITMAPARRAY, a), 181 SSMFIELD_ENTRY_TERM() 182 }; 183 184 /** 185 * SSM descriptor table for the CSAMPAGEREC structure. 186 */ 187 static const SSMFIELD g_aCsamPageRecFields[] = 188 { 189 SSMFIELD_ENTRY_HCPTR( CSAMPAGEREC, Core.Key), 190 SSMFIELD_ENTRY_HCPTR( CSAMPAGEREC, Core.pLeft), 191 SSMFIELD_ENTRY_HCPTR( CSAMPAGEREC, Core.pRight), 192 SSMFIELD_ENTRY_IGNORE( CSAMPAGEREC, Core.uchHeight), 193 SSMFIELD_ENTRY_PAD_HC_AUTO( 3, 7), 194 SSMFIELD_ENTRY_RCPTR( CSAMPAGEREC, page.pPageGC), 195 #ifdef _MSC_VER /** @todo check/fix this! */ 196 SSMFIELD_ENTRY_PAD_HC_AUTO( 4, 4), 197 #else 198 SSMFIELD_ENTRY_PAD_HC_AUTO( 0, 4), 199 #endif 200 SSMFIELD_ENTRY_GCPHYS( CSAMPAGEREC, page.GCPhys), 201 SSMFIELD_ENTRY( CSAMPAGEREC, page.fFlags), 202 SSMFIELD_ENTRY( CSAMPAGEREC, page.uSize), 203 SSMFIELD_ENTRY_PAD_HC_AUTO( 0, 4), 204 SSMFIELD_ENTRY_HCPTR_NI( CSAMPAGEREC, page.pBitmap), 205 SSMFIELD_ENTRY( CSAMPAGEREC, page.fCode32), 206 SSMFIELD_ENTRY( CSAMPAGEREC, page.fMonitorActive), 207 SSMFIELD_ENTRY( CSAMPAGEREC, page.fMonitorInvalidation), 208 SSMFIELD_ENTRY_PAD_HC_AUTO( 1, 1), 209 SSMFIELD_ENTRY( CSAMPAGEREC, page.enmTag), 210 SSMFIELD_ENTRY( CSAMPAGEREC, page.u64Hash), 211 SSMFIELD_ENTRY_TERM() 212 }; 213 104 214 105 215 /** … … 461 571 * Restore CSAM structure 462 572 */ 573 #if 0 463 574 rc = SSMR3GetMem(pSSM, &csamInfo, sizeof(csamInfo)); 575 #else 576 RT_ZERO(csamInfo); 577 rc = SSMR3GetStructEx(pSSM, &csamInfo, sizeof(csamInfo), SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamFields[0], NULL); 578 #endif 464 579 AssertRCReturn(rc, rc); 465 580 … … 477 592 478 593 /* Restore pgdir bitmap (we'll change the pointers next). */ 594 #if 0 479 595 rc = SSMR3GetMem(pSSM, pVM->csam.s.pPDBitmapHC, CSAM_PGDIRBMP_CHUNKS*sizeof(RTHCPTR)); 596 #else 597 rc = SSMR3GetStructEx(pSSM, pVM->csam.s.pPDBitmapHC, sizeof(uint8_t *) * CSAM_PGDIRBMP_CHUNKS, 598 SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamPDBitmapArray[0], NULL); 599 #endif 480 600 AssertRCReturn(rc, rc); 481 601 … … 516 636 PCSAMPAGE pPage; 517 637 638 #if 0 518 639 rc = SSMR3GetMem(pSSM, &page, sizeof(page)); 640 #else 641 RT_ZERO(page); 642 rc = SSMR3GetStructEx(pSSM, &page, sizeof(page), SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamPageRecFields[0], NULL); 643 #endif 519 644 AssertRCReturn(rc, rc); 520 645 … … 541 666 } 542 667 543 /* * @notewe don't restore aDangerousInstr; it will be recreated automatically. */668 /* Note: we don't restore aDangerousInstr; it will be recreated automatically. */ 544 669 memset(&pVM->csam.s.aDangerousInstr, 0, sizeof(pVM->csam.s.aDangerousInstr)); 545 670 pVM->csam.s.cDangerousInstr = 0;
Note:
See TracChangeset
for help on using the changeset viewer.