Changeset 56384 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jun 12, 2015 12:34:31 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 100983
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r55889 r56384 450 450 451 451 452 #if PGM_GST_TYPE == PGM_TYPE_32BIT \ 453 || PGM_GST_TYPE == PGM_TYPE_PAE \ 454 || PGM_GST_TYPE == PGM_TYPE_AMD64 452 #if ( PGM_GST_TYPE == PGM_TYPE_32BIT \ 453 || PGM_GST_TYPE == PGM_TYPE_PAE \ 454 || PGM_GST_TYPE == PGM_TYPE_AMD64) \ 455 && defined(VBOX_WITH_RAW_MODE) 455 456 /** 456 457 * Updates one virtual handler range. … … 608 609 return 0; 609 610 } 610 #endif /* 32BIT, PAE and AMD64 */611 #endif /* 32BIT, PAE and AMD64 + VBOX_WITH_RAW_MODE */ 611 612 612 613 … … 622 623 PGM_GST_DECL(bool, HandlerVirtualUpdate)(PVM pVM, uint32_t cr4) 623 624 { 624 #if PGM_GST_TYPE == PGM_TYPE_32BIT \ 625 || PGM_GST_TYPE == PGM_TYPE_PAE \ 626 || PGM_GST_TYPE == PGM_TYPE_AMD64 625 #if ( PGM_GST_TYPE == PGM_TYPE_32BIT \ 626 || PGM_GST_TYPE == PGM_TYPE_PAE \ 627 || PGM_GST_TYPE == PGM_TYPE_AMD64) \ 628 && defined(VBOX_WITH_RAW_MODE) 627 629 628 630 /** @todo -
trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
r55966 r56384 1366 1366 1367 1367 1368 #ifdef VBOX_WITH_RAW_MODE 1369 1368 1370 /** 1369 1371 * Internal worker for releasing a virtual handler type registration reference. … … 1611 1613 } 1612 1614 1613 # if defined(VBOX_STRICT) || defined(LOG_ENABLED)1615 # if defined(VBOX_STRICT) || defined(LOG_ENABLED) 1614 1616 1615 1617 /** … … 1643 1645 } 1644 1646 1645 #endif /* VBOX_STRICT || LOG_ENABLED */ 1647 # endif /* VBOX_STRICT || LOG_ENABLED */ 1648 #endif /* VBOX_WITH_RAW_MODE */ 1646 1649 #ifdef VBOX_STRICT 1647 1650 … … 1664 1667 } PGMAHAFIS, *PPGMAHAFIS; 1665 1668 1666 1667 #if 0 /* unused */ 1669 # ifdef VBOX_WITH_RAW_MODE 1670 1671 # if 0 /* unused */ 1668 1672 /** 1669 1673 * Verify virtual handler by matching physical address. … … 1694 1698 return 0; 1695 1699 } 1696 # endif /* unused */1700 # endif /* unused */ 1697 1701 1698 1702 … … 1804 1808 } 1805 1809 1810 # endif /* VBOX_WITH_RAW_MODE */ 1806 1811 1807 1812 /** … … 1880 1885 } 1881 1886 1882 # ifdef VBOX_WITH_REM1883 # ifdef IN_RING31887 # ifdef VBOX_WITH_REM 1888 # ifdef IN_RING3 1884 1889 /* validate that REM is handling it. */ 1885 1890 if ( !REMR3IsPageAccessHandled(pVM, State.GCPhys) … … 1891 1896 State.cErrors++; 1892 1897 } 1898 # endif 1893 1899 # endif 1894 #endif1895 1900 } 1896 1901 else … … 1907 1912 { 1908 1913 State.uVirtState = PGM_PAGE_GET_HNDL_VIRT_STATE(pPage); 1909 #if 1 1914 1910 1915 /* locate all the matching physical ranges. */ 1911 1916 State.uVirtStateFound = PGM_PAGE_HNDL_VIRT_STATE_NONE; 1917 # ifdef VBOX_WITH_RAW_MODE 1912 1918 RTGCPHYS GCPhysKey = State.GCPhys; 1913 1919 for (;;) … … 1938 1944 break; 1939 1945 } 1940 #else 1941 /* very slow */ 1942 RTAvlroGCPtrDoWithAll(&pVM->pgm.s.CTX_SUFF(pTrees)->VirtHandlers, true, pgmHandlerVirtualVerifyOneByPhysAddr, &State); 1943 #endif 1946 # endif /* VBOX_WITH_RAW_MODE */ 1944 1947 if (State.uVirtState != State.uVirtStateFound) 1945 1948 { … … 1953 1956 } /* foreach ram range. */ 1954 1957 1958 # ifdef VBOX_WITH_RAW_MODE 1955 1959 /* 1956 1960 * Check that the physical addresses of the virtual handlers matches up … … 1958 1962 */ 1959 1963 RTAvlroGCPtrDoWithAll(&pVM->pgm.s.CTX_SUFF(pTrees)->VirtHandlers, true, pgmHandlerVirtualVerifyOne, &State); 1964 # endif 1960 1965 1961 1966 /* -
trunk/src/VBox/VMM/VMMR3/PGM.cpp
r56252 r56384 673 673 static DECLCALLBACK(void) pgmR3InfoCr3(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); 674 674 static DECLCALLBACK(int) pgmR3RelocatePhysHandler(PAVLROGCPHYSNODECORE pNode, void *pvUser); 675 #ifdef VBOX_WITH_RAW_MODE 675 676 static DECLCALLBACK(int) pgmR3RelocateVirtHandler(PAVLROGCPTRNODECORE pNode, void *pvUser); 676 677 static DECLCALLBACK(int) pgmR3RelocateHyperVirtHandler(PAVLROGCPTRNODECORE pNode, void *pvUser); 678 #endif /* VBOX_WITH_RAW_MODE */ 677 679 #ifdef VBOX_STRICT 678 680 static FNVMATSTATE pgmR3ResetNoMorePhysWritesFlag; … … 2439 2441 } 2440 2442 2443 #ifdef VBOX_WITH_RAW_MODE 2441 2444 RTAvlroGCPtrDoWithAll(&pVM->pgm.s.pTreesR3->VirtHandlers, true, pgmR3RelocateVirtHandler, &Args); 2442 2445 RTAvlroGCPtrDoWithAll(&pVM->pgm.s.pTreesR3->HyperVirtHandlers, true, pgmR3RelocateHyperVirtHandler, &Args); … … 2450 2453 pCurVirtType->pfnPfHandlerRC += offDelta; 2451 2454 } 2455 #endif 2452 2456 2453 2457 /* … … 2483 2487 } 2484 2488 2489 #ifdef VBOX_WITH_RAW_MODE 2485 2490 2486 2491 /** … … 2523 2528 } 2524 2529 2530 #endif /* VBOX_WITH_RAW_MODE */ 2525 2531 2526 2532 /** … … 4044 4050 bool fLeftToRight; /**< true: left-to-right; false: right-to-left. */ 4045 4051 PPGMPHYSHANDLER pPrevPhys; 4052 #ifdef VBOX_WITH_RAW_MODE 4046 4053 PPGMVIRTHANDLER pPrevVirt; 4047 4054 PPGMPHYS2VIRTHANDLER pPrevPhys2Virt; 4055 #else 4056 void *pvFiller1, *pvFiller2; 4057 #endif 4048 4058 PVM pVM; 4049 4059 } PGMCHECKINTARGS, *PPGMCHECKINTARGS; … … 4075 4085 } 4076 4086 4087 #ifdef VBOX_WITH_RAW_MODE 4077 4088 4078 4089 /** … … 4170 4181 } 4171 4182 4183 #endif /* VBOX_WITH_RAW_MODE */ 4172 4184 4173 4185 /** … … 4192 4204 Args = s_RightToLeft; 4193 4205 cErrors += RTAvlroGCPhysDoWithAll(&pVM->pgm.s.pTreesR3->PhysHandlers, false, pgmR3CheckIntegrityPhysHandlerNode, &Args); 4206 #ifdef VBOX_WITH_RAW_MODE 4194 4207 Args = s_LeftToRight; 4195 4208 cErrors += RTAvlroGCPtrDoWithAll( &pVM->pgm.s.pTreesR3->VirtHandlers, true, pgmR3CheckIntegrityVirtHandlerNode, &Args); … … 4204 4217 Args = s_RightToLeft; 4205 4218 cErrors += RTAvlroGCPhysDoWithAll(&pVM->pgm.s.pTreesR3->PhysToVirtHandlers, false, pgmR3CheckIntegrityPhysToVirtHandlerNode, &Args); 4219 #endif /* VBOX_WITH_RAW_MODE */ 4206 4220 4207 4221 return !cErrors ? VINF_SUCCESS : VERR_INTERNAL_ERROR; -
trunk/src/VBox/VMM/VMMR3/PGMHandler.cpp
r56054 r56384 61 61 static DECLCALLBACK(int) pgmR3HandlerPhysicalOneSet(PAVLROGCPHYSNODECORE pNode, void *pvUser); 62 62 static DECLCALLBACK(int) pgmR3InfoHandlersPhysicalOne(PAVLROGCPHYSNODECORE pNode, void *pvUser); 63 #ifdef VBOX_WITH_RAW_MODE 63 64 static DECLCALLBACK(int) pgmR3InfoHandlersVirtualOne(PAVLROGCPTRNODECORE pNode, void *pvUser); 65 #endif 64 66 65 67 … … 304 306 } 305 307 308 #ifdef VBOX_WITH_RAW_MODE 306 309 307 310 /** … … 673 676 } 674 677 678 #endif /* VBOX_WITH_RAW_MODE */ 679 675 680 676 681 /** … … 728 733 } 729 734 735 #ifdef VBOX_WITH_RAW_MODE 730 736 if (fVirtual) 731 737 { … … 751 757 RTAvlroGCPtrDoWithAll(&pVM->pgm.s.pTreesR3->HyperVirtHandlers, true, pgmR3InfoHandlersVirtualOne, &Args); 752 758 } 759 #endif 753 760 } 754 761 … … 789 796 790 797 798 #ifdef VBOX_WITH_RAW_MODE 791 799 /** 792 800 * Displays one virtual handler range. … … 812 820 pHlp->pfnPrintf(pHlp, "%RGv - %RGv %RHv %RRv %s %s\n", 813 821 pCur->Core.Key, pCur->Core.KeyLast, pCurType->pfnHandlerR3, pCurType->pfnPfHandlerRC, pszType, pCur->pszDesc); 814 # ifdef VBOX_WITH_STATISTICS822 # ifdef VBOX_WITH_STATISTICS 815 823 if (pArgs->fStats) 816 824 pHlp->pfnPrintf(pHlp, " cPeriods: %9RU64 cTicks: %11RU64 Min: %11RU64 Avg: %11RU64 Max: %11RU64\n", 817 825 pCur->Stat.cPeriods, pCur->Stat.cTicks, pCur->Stat.cTicksMin, 818 826 pCur->Stat.cPeriods ? pCur->Stat.cTicks / pCur->Stat.cPeriods : 0, pCur->Stat.cTicksMax); 819 # endif827 # endif 820 828 return 0; 821 829 } 822 830 #endif /* VBOX_WITH_RAW_MODE */ 831 -
trunk/src/VBox/VMM/include/PGMInline.h
r55889 r56384 1199 1199 1200 1200 1201 #ifdef VBOX_WITH_RAW_MODE 1201 1202 /** 1202 1203 * Clears one physical page of a virtual handler. … … 1216 1217 * Remove the node from the tree (it's supposed to be in the tree if we get here!). 1217 1218 */ 1218 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL1219 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL 1219 1220 AssertReleaseMsg(pPhys2Virt->offNextAlias & PGMPHYS2VIRTHANDLER_IN_TREE, 1220 1221 ("pPhys2Virt=%p:{.Core.Key=%RGp, .Core.KeyLast=%RGp, .offVirtHandler=%#RX32, .offNextAlias=%#RX32}\n", 1221 1222 pPhys2Virt, pPhys2Virt->Core.Key, pPhys2Virt->Core.KeyLast, pPhys2Virt->offVirtHandler, pPhys2Virt->offNextAlias)); 1222 # endif1223 # endif 1223 1224 if (pPhys2Virt->offNextAlias & PGMPHYS2VIRTHANDLER_IS_HEAD) 1224 1225 { 1225 1226 /* We're the head of the alias chain. */ 1226 1227 PPGMPHYS2VIRTHANDLER pRemove = (PPGMPHYS2VIRTHANDLER)RTAvlroGCPhysRemove(&pVM->pgm.s.CTX_SUFF(pTrees)->PhysToVirtHandlers, pPhys2Virt->Core.Key); NOREF(pRemove); 1227 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL1228 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL 1228 1229 AssertReleaseMsg(pRemove != NULL, 1229 1230 ("pPhys2Virt=%p:{.Core.Key=%RGp, .Core.KeyLast=%RGp, .offVirtHandler=%#RX32, .offNextAlias=%#RX32}\n", … … 1234 1235 pPhys2Virt, pPhys2Virt->Core.Key, pPhys2Virt->Core.KeyLast, pPhys2Virt->offVirtHandler, pPhys2Virt->offNextAlias, 1235 1236 pRemove, pRemove->Core.Key, pRemove->Core.KeyLast, pRemove->offVirtHandler, pRemove->offNextAlias)); 1236 # endif1237 # endif 1237 1238 if (pPhys2Virt->offNextAlias & PGMPHYS2VIRTHANDLER_OFF_MASK) 1238 1239 { 1239 1240 /* Insert the next list in the alias chain into the tree. */ 1240 1241 PPGMPHYS2VIRTHANDLER pNext = (PPGMPHYS2VIRTHANDLER)((intptr_t)pPhys2Virt + (pPhys2Virt->offNextAlias & PGMPHYS2VIRTHANDLER_OFF_MASK)); 1241 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL1242 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL 1242 1243 AssertReleaseMsg(pNext->offNextAlias & PGMPHYS2VIRTHANDLER_IN_TREE, 1243 1244 ("pNext=%p:{.Core.Key=%RGp, .Core.KeyLast=%RGp, .offVirtHandler=%#RX32, .offNextAlias=%#RX32}\n", 1244 1245 pNext, pNext->Core.Key, pNext->Core.KeyLast, pNext->offVirtHandler, pNext->offNextAlias)); 1245 # endif1246 # endif 1246 1247 pNext->offNextAlias |= PGMPHYS2VIRTHANDLER_IS_HEAD; 1247 1248 bool fRc = RTAvlroGCPhysInsert(&pVM->pgm.s.CTX_SUFF(pTrees)->PhysToVirtHandlers, &pNext->Core); … … 1253 1254 /* Locate the previous node in the alias chain. */ 1254 1255 PPGMPHYS2VIRTHANDLER pPrev = (PPGMPHYS2VIRTHANDLER)RTAvlroGCPhysGet(&pVM->pgm.s.CTX_SUFF(pTrees)->PhysToVirtHandlers, pPhys2Virt->Core.Key); 1255 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL1256 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL 1256 1257 AssertReleaseMsg(pPrev != pPhys2Virt, 1257 1258 ("pPhys2Virt=%p:{.Core.Key=%RGp, .Core.KeyLast=%RGp, .offVirtHandler=%#RX32, .offNextAlias=%#RX32} pPrev=%p\n", 1258 1259 pPhys2Virt, pPhys2Virt->Core.Key, pPhys2Virt->Core.KeyLast, pPhys2Virt->offVirtHandler, pPhys2Virt->offNextAlias, pPrev)); 1259 # endif1260 # endif 1260 1261 for (;;) 1261 1262 { … … 1280 1281 if (pNext == pPrev) 1281 1282 { 1282 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL1283 # ifdef VBOX_STRICT_PGM_HANDLER_VIRTUAL 1283 1284 AssertReleaseMsg(pNext != pPrev, 1284 1285 ("pPhys2Virt=%p:{.Core.Key=%RGp, .Core.KeyLast=%RGp, .offVirtHandler=%#RX32, .offNextAlias=%#RX32} pPrev=%p\n", 1285 1286 pPhys2Virt, pPhys2Virt->Core.Key, pPhys2Virt->Core.KeyLast, pPhys2Virt->offVirtHandler, pPhys2Virt->offNextAlias, pPrev)); 1286 # endif1287 # endif 1287 1288 break; 1288 1289 } … … 1302 1303 PGM_PAGE_SET_HNDL_VIRT_STATE(pPage, PGM_PAGE_HNDL_VIRT_STATE_NONE); 1303 1304 } 1305 #endif /* VBOX_WITH_RAW_MODE */ 1304 1306 1305 1307 -
trunk/src/VBox/VMM/include/PGMInternal.h
r56252 r56384 665 665 666 666 667 #ifdef VBOX_WITH_RAW_MODE 668 667 669 /** 668 670 * Cache node for the physical addresses covered by a virtual handler. … … 685 687 /** The bit in PGMPHYS2VIRTHANDLER::offNextAlias used to indicate that the 686 688 * node is in the tree. */ 687 # define PGMPHYS2VIRTHANDLER_IN_TREE RT_BIT(0)689 # define PGMPHYS2VIRTHANDLER_IN_TREE RT_BIT(0) 688 690 /** The bit in PGMPHYS2VIRTHANDLER::offNextAlias used to indicate that the 689 691 * node is in the head of an alias chain. 690 692 * The PGMPHYS2VIRTHANDLER_IN_TREE is always set if this bit is set. */ 691 # define PGMPHYS2VIRTHANDLER_IS_HEAD RT_BIT(1)693 # define PGMPHYS2VIRTHANDLER_IS_HEAD RT_BIT(1) 692 694 /** The mask to apply to PGMPHYS2VIRTHANDLER::offNextAlias to get the offset. */ 693 # define PGMPHYS2VIRTHANDLER_OFF_MASK (~(int32_t)3)695 # define PGMPHYS2VIRTHANDLER_OFF_MASK (~(int32_t)3) 694 696 695 697 … … 726 728 typedef PGMVIRTHANDLERTYPEINT *PPGMVIRTHANDLERTYPEINT; 727 729 /** Magic value for the virtual handler callbacks (Sir Arthur Charles Clarke). */ 728 # define PGMVIRTHANDLERTYPEINT_MAGICUINT32_C(0x19171216)730 # define PGMVIRTHANDLERTYPEINT_MAGIC UINT32_C(0x19171216) 729 731 /** Magic value for the virtual handler callbacks. */ 730 # define PGMVIRTHANDLERTYPEINT_MAGIC_DEADUINT32_C(0x20080319)732 # define PGMVIRTHANDLERTYPEINT_MAGIC_DEAD UINT32_C(0x20080319) 731 733 732 734 /** … … 736 738 * @param a_hType Vitual access handler type handle. 737 739 */ 738 # define PGMVIRTHANDLERTYPEINT_FROM_HANDLE(a_pVM, a_hType) ((PPGMVIRTHANDLERTYPEINT)MMHyperHeapOffsetToPtr(a_pVM, a_hType))740 # define PGMVIRTHANDLERTYPEINT_FROM_HANDLE(a_pVM, a_hType) ((PPGMVIRTHANDLERTYPEINT)MMHyperHeapOffsetToPtr(a_pVM, a_hType)) 739 741 740 742 … … 761 763 /** Description / Name. For easing debugging. */ 762 764 R3PTRTYPE(const char *) pszDesc; 763 # ifdef VBOX_WITH_STATISTICS765 # ifdef VBOX_WITH_STATISTICS 764 766 /** Profiling of this handler. */ 765 767 STAMPROFILE Stat; 766 # endif768 # endif 767 769 /** Array of cached physical addresses for the monitored ranged. */ 768 770 PGMPHYS2VIRTHANDLER aPhysToVirt[HC_ARCH_BITS == 32 ? 1 : 2]; … … 778 780 * (PGMVIRTHANDLER). 779 781 */ 780 #define PGMVIRTANDLER_GET_TYPE(a_pVM, a_pVirtHandler) PGMVIRTHANDLERTYPEINT_FROM_HANDLE(a_pVM, (a_pVirtHandler)->hType) 782 # define PGMVIRTANDLER_GET_TYPE(a_pVM, a_pVirtHandler) PGMVIRTHANDLERTYPEINT_FROM_HANDLE(a_pVM, (a_pVirtHandler)->hType) 783 784 #endif /* VBOX_WITH_RAW_MODE */ 781 785 782 786 … … 2710 2714 typedef struct PGMTREES 2711 2715 { 2716 /** List of physical access handler types (offset pointers) of type 2717 * PGMPHYSHANDLERTYPEINT. This is needed for relocations. */ 2718 RTLISTOFF32ANCHOR HeadPhysHandlerTypes; 2712 2719 /** Physical access handlers (AVL range+offsetptr tree). */ 2713 2720 AVLROGCPHYSTREE PhysHandlers; 2721 #ifdef VBOX_WITH_RAW_MODE 2714 2722 /** Virtual access handlers (AVL range + GC ptr tree). */ 2715 2723 AVLROGCPTRTREE VirtHandlers; … … 2719 2727 /** Virtual access handlers for the hypervisor (AVL range + GC ptr tree). */ 2720 2728 AVLROGCPTRTREE HyperVirtHandlers; 2721 /** List of physical access handler types (offset pointers) of type2722 * PGMPHYSHANDLERTYPEINT. This is needed for relocations. */2723 RTLISTOFF32ANCHOR HeadPhysHandlerTypes;2724 2729 /** List of virtual access handler types (offset pointers) of type 2725 2730 * PGMVIRTHANDLERTYPEINT. This is needed for relocations. */ 2726 2731 RTLISTOFF32ANCHOR HeadVirtHandlerTypes; 2732 #endif 2727 2733 } PGMTREES; 2728 2734 /** Pointer to PGM trees. */ … … 4128 4134 bool pgmHandlerPhysicalIsAll(PVM pVM, RTGCPHYS GCPhys); 4129 4135 void pgmHandlerPhysicalResetAliasedPage(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhysPage, bool fDoAccounting); 4136 #ifdef VBOX_WITH_RAW_MODE 4130 4137 PPGMVIRTHANDLER pgmHandlerVirtualFindByPhysAddr(PVM pVM, RTGCPHYS GCPhys, unsigned *piPage); 4131 4138 DECLCALLBACK(int) pgmHandlerVirtualResetOne(PAVLROGCPTRNODECORE pNode, void *pvUser); 4132 # if defined(VBOX_STRICT) || defined(LOG_ENABLED)4139 # if defined(VBOX_STRICT) || defined(LOG_ENABLED) 4133 4140 void pgmHandlerVirtualDumpPhysPages(PVM pVM); 4134 #else 4135 # define pgmHandlerVirtualDumpPhysPages(a) do { } while (0) 4136 #endif 4141 # else 4142 # define pgmHandlerVirtualDumpPhysPages(a) do { } while (0) 4143 # endif 4144 #endif /* VBOX_WITH_RAW_MODE */ 4137 4145 DECLCALLBACK(void) pgmR3InfoHandlers(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); 4138 4146 int pgmR3InitSavedState(PVM pVM, uint64_t cbRam); -
trunk/src/VBox/VMM/testcase/tstVMStruct.h
r56052 r56384 860 860 GEN_CHECK_SIZE(PGMTREES); 861 861 GEN_CHECK_OFF(PGMTREES, PhysHandlers); 862 GEN_CHECK_OFF(PGMTREES, HeadPhysHandlerTypes); 863 #ifdef VBOX_WITH_RAW_MODE 862 864 GEN_CHECK_OFF(PGMTREES, VirtHandlers); 863 865 GEN_CHECK_OFF(PGMTREES, PhysToVirtHandlers); 864 866 GEN_CHECK_OFF(PGMTREES, HyperVirtHandlers); 867 GEN_CHECK_OFF(PGMTREES, HeadVirtHandlerTypes); 868 #endif 865 869 GEN_CHECK_SIZE(PGMPOOLPAGE); 866 870 GEN_CHECK_OFF(PGMPOOLPAGE, Core);
Note:
See TracChangeset
for help on using the changeset viewer.