Changeset 36937 in vbox for trunk/src/VBox/VMM
- Timestamp:
- May 3, 2011 2:11:41 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 71524
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/include/PGMInternal.h
r36935 r36937 691 691 typedef struct PGMPAGE 692 692 { 693 /** The physical address and the Page ID. */694 RTHCPHYS HCPhysAndPageID;695 693 union 696 694 { … … 698 696 struct 699 697 { 698 /** The physical address and the Page ID. */ 699 RTHCPHYS HCPhysAndPageID; 700 700 701 /** 7:0 - The physical handler state 701 702 * (PGM_PAGE_HNDL_PHYS_STATE_*). */ … … 722 723 /** 31:22 - PTE index for usage tracking (page pool). */ 723 724 uint32_t u10PteIdx : 10; 725 726 /** Usage tracking (page pool). */ 727 uint16_t u16TrackingY; 728 /** The number of read locks on this page. */ 729 uint8_t cReadLocksY; 730 /** The number of write locks on this page. */ 731 uint8_t cWriteLocksY; 724 732 } bit; 725 /** 32-bit integer view. */ 726 uint32_t u; 733 734 /** 64-bit integer view. */ 735 uint64_t au64[2]; 727 736 /** 16-bit view. */ 728 uint16_t au16[2]; 737 uint32_t au32[4]; 738 /** 16-bit view. */ 739 uint16_t au16[8]; 729 740 /** 8-bit view. */ 730 uint8_t au8[ 4];741 uint8_t au8[16]; 731 742 } u1; 732 /** Usage tracking (page pool). */733 uint16_t u16TrackingY;734 /** The number of read locks on this page. */735 uint8_t cReadLocksY;736 /** The number of write locks on this page. */737 uint8_t cWriteLocksY;738 743 } PGMPAGE; 739 744 AssertCompileSize(PGMPAGE, 16); … … 752 757 #define PGM_PAGE_CLEAR(a_pPage) \ 753 758 do { \ 754 (a_pPage)->HCPhysAndPageID = 0; \ 755 (a_pPage)->u1.u = 0; \ 756 (a_pPage)->u16TrackingY = 0; \ 757 (a_pPage)->cReadLocksY = 0; \ 758 (a_pPage)->cWriteLocksY = 0; \ 759 (a_pPage)->u1.au64[0] = 0; \ 760 (a_pPage)->u1.au64[1] = 0; \ 759 761 } while (0) 760 762 … … 767 769 RTHCPHYS SetHCPhysTmp = (a_HCPhys); \ 768 770 AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \ 769 (a_pPage)->u1.u = 0; \ 770 (a_pPage)->u16TrackingY = 0; \ 771 (a_pPage)->cReadLocksY = 0; \ 772 (a_pPage)->cWriteLocksY = 0; \ 773 (a_pPage)->HCPhysAndPageID = (SetHCPhysTmp << (28-12)) | ((a_idPage) & UINT32_C(0x0fffffff)); \ 774 (a_pPage)->u1.bit.uStateY = (a_uState); \ 775 (a_pPage)->u1.bit.uTypeY = (a_uType); \ 771 (a_pPage)->u1.bit.HCPhysAndPageID = (SetHCPhysTmp << (28-12)) | ((a_idPage) & UINT32_C(0x0fffffff)); \ 772 (a_pPage)->u1.au64[1] = 0; \ 773 (a_pPage)->u1.bit.uStateY = (a_uState); \ 774 (a_pPage)->u1.bit.uTypeY = (a_uType); \ 776 775 } while (0) 777 776 … … 829 828 * @param a_pPage Pointer to the physical guest page tracking structure. 830 829 */ 831 #define PGM_PAGE_GET_HCPHYS(a_pPage) ( ((a_pPage)-> HCPhysAndPageID >> 28) << 12 )830 #define PGM_PAGE_GET_HCPHYS(a_pPage) ( ((a_pPage)->u1.bit.HCPhysAndPageID >> 28) << 12 ) 832 831 833 832 /** … … 840 839 RTHCPHYS const SetHCPhysTmp = (a_HCPhys); \ 841 840 AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \ 842 (a_pPage)-> HCPhysAndPageID = ((a_pPage)->HCPhysAndPageID & UINT32_C(0x0fffffff)) \843 | (SetHCPhysTmp << (28-12)); \841 (a_pPage)->u1.bit.HCPhysAndPageID = ((a_pPage)->u1.bit.HCPhysAndPageID & UINT32_C(0x0fffffff)) \ 842 | (SetHCPhysTmp << (28-12)); \ 844 843 } while (0) 845 844 … … 849 848 * @param a_pPage Pointer to the physical guest page tracking structure. 850 849 */ 851 #define PGM_PAGE_GET_PAGEID(a_pPage) ( (uint32_t)((a_pPage)-> HCPhysAndPageID & UINT32_C(0x0fffffff)) )850 #define PGM_PAGE_GET_PAGEID(a_pPage) ( (uint32_t)((a_pPage)->u1.bit.HCPhysAndPageID & UINT32_C(0x0fffffff)) ) 852 851 853 852 /** … … 858 857 #define PGM_PAGE_SET_PAGEID(a_pPage, a_idPage) \ 859 858 do { \ 860 (a_pPage)-> HCPhysAndPageID = (((a_pPage)->HCPhysAndPageID) & UINT64_C(0xfffffffff0000000)) \861 | ((a_idPage) & UINT32_C(0x0fffffff)); \859 (a_pPage)->u1.bit.HCPhysAndPageID = (((a_pPage)->u1.bit.HCPhysAndPageID) & UINT64_C(0xfffffffff0000000)) \ 860 | ((a_idPage) & UINT32_C(0x0fffffff)); \ 862 861 } while (0) 863 862 … … 874 873 * @param a_pPage Pointer to the physical guest page tracking structure. 875 874 */ 876 #define PGM_PAGE_GET_PAGE_IN_CHUNK(a_pPage) ( (uint32_t)((a_pPage)-> HCPhysAndPageID & GMM_PAGEID_IDX_MASK) )875 #define PGM_PAGE_GET_PAGE_IN_CHUNK(a_pPage) ( (uint32_t)((a_pPage)->u1.bit.HCPhysAndPageID & GMM_PAGEID_IDX_MASK) ) 877 876 878 877 /** … … 1114 1113 #ifdef PGM_PAGE_WITH_OPTIMIZED_HANDLER_ACCESS 1115 1114 # define PGM_PAGE_HAS_ANY_HANDLERS(a_pPage) \ 1116 ( ((a_pPage)->u1. u& UINT16_C(0x0303)) != 0 )1115 ( ((a_pPage)->u1.au32[2] & UINT16_C(0x0303)) != 0 ) 1117 1116 #else 1118 1117 # define PGM_PAGE_HAS_ANY_HANDLERS(a_pPage) \ … … 1128 1127 #ifdef PGM_PAGE_WITH_OPTIMIZED_HANDLER_ACCESS 1129 1128 # define PGM_PAGE_HAS_ACTIVE_HANDLERS(a_pPage) \ 1130 ( ((a_pPage)->u1. u& UINT16_C(0x0202)) != 0 )1129 ( ((a_pPage)->u1.au32[2] & UINT16_C(0x0202)) != 0 ) 1131 1130 #else 1132 1131 # define PGM_PAGE_HAS_ACTIVE_HANDLERS(a_pPage) \ … … 1142 1141 #ifdef PGM_PAGE_WITH_OPTIMIZED_HANDLER_ACCESS 1143 1142 # define PGM_PAGE_HAS_ACTIVE_ALL_HANDLERS(a_pPage) \ 1144 ( ( ((a_pPage)->u1.au8[ 0] | (a_pPage)->u1.au8[1]) & UINT8_C(0x3) ) \1143 ( ( ((a_pPage)->u1.au8[8] | (a_pPage)->u1.au8[9]) & UINT8_C(0x3) ) \ 1145 1144 == PGM_PAGE_HNDL_PHYS_STATE_ALL ) 1146 1145 #else … … 1156 1155 * @param a_pPage Pointer to the physical guest page tracking structure. 1157 1156 */ 1158 #define PGM_PAGE_GET_TRACKING(a_pPage) ( (a_pPage)->u1 6TrackingY )1157 #define PGM_PAGE_GET_TRACKING(a_pPage) ( (a_pPage)->u1.bit.u16TrackingY ) 1159 1158 1160 1159 /** @def PGM_PAGE_SET_TRACKING … … 1164 1163 */ 1165 1164 #define PGM_PAGE_SET_TRACKING(a_pPage, a_u16TrackingData) \ 1166 do { (a_pPage)->u1 6TrackingY = (a_u16TrackingData); } while (0)1165 do { (a_pPage)->u1.bit.u16TrackingY = (a_u16TrackingData); } while (0) 1167 1166 1168 1167 /** @def PGM_PAGE_GET_TD_CREFS … … 1190 1189 * @param a_pPage Pointer to the physical guest page tracking structure. 1191 1190 */ 1192 #define PGM_PAGE_GET_READ_LOCKS(a_pPage) ( (a_pPage)-> cReadLocksY )1191 #define PGM_PAGE_GET_READ_LOCKS(a_pPage) ( (a_pPage)->u1.bit.cReadLocksY ) 1193 1192 1194 1193 /** Get the write lock count. … … 1196 1195 * @param a_pPage Pointer to the physical guest page tracking structure. 1197 1196 */ 1198 #define PGM_PAGE_GET_WRITE_LOCKS(a_pPage) ( (a_pPage)-> cWriteLocksY )1197 #define PGM_PAGE_GET_WRITE_LOCKS(a_pPage) ( (a_pPage)->u1.bit.cWriteLocksY ) 1199 1198 1200 1199 /** Decrement the read lock counter. 1201 1200 * @param a_pPage Pointer to the physical guest page tracking structure. 1202 1201 */ 1203 #define PGM_PAGE_DEC_READ_LOCKS(a_pPage) do { --(a_pPage)-> cReadLocksY; } while (0)1202 #define PGM_PAGE_DEC_READ_LOCKS(a_pPage) do { --(a_pPage)->u1.bit.cReadLocksY; } while (0) 1204 1203 1205 1204 /** Decrement the write lock counter. 1206 1205 * @param a_pPage Pointer to the physical guest page tracking structure. 1207 1206 */ 1208 #define PGM_PAGE_DEC_WRITE_LOCKS(a_pPage) do { --(a_pPage)-> cWriteLocksY; } while (0)1207 #define PGM_PAGE_DEC_WRITE_LOCKS(a_pPage) do { --(a_pPage)->u1.bit.cWriteLocksY; } while (0) 1209 1208 1210 1209 /** Increment the read lock counter. 1211 1210 * @param a_pPage Pointer to the physical guest page tracking structure. 1212 1211 */ 1213 #define PGM_PAGE_INC_READ_LOCKS(a_pPage) do { ++(a_pPage)-> cReadLocksY; } while (0)1212 #define PGM_PAGE_INC_READ_LOCKS(a_pPage) do { ++(a_pPage)->u1.bit.cReadLocksY; } while (0) 1214 1213 1215 1214 /** Increment the write lock counter. 1216 1215 * @param a_pPage Pointer to the physical guest page tracking structure. 1217 1216 */ 1218 #define PGM_PAGE_INC_WRITE_LOCKS(a_pPage) do { ++(a_pPage)-> cWriteLocksY; } while (0)1217 #define PGM_PAGE_INC_WRITE_LOCKS(a_pPage) do { ++(a_pPage)->u1.bit.cWriteLocksY; } while (0) 1219 1218 1220 1219 -
trunk/src/VBox/VMM/testcase/tstVMStructRC.cpp
r36891 r36937 691 691 GEN_CHECK_OFF(PGMVIRTHANDLER, aPhysToVirt); 692 692 GEN_CHECK_SIZE(PGMPAGE); 693 GEN_CHECK_OFF(PGMPAGE, HCPhysAndPageID);694 GEN_CHECK_OFF(PGMPAGE, cReadLocksY);695 GEN_CHECK_OFF(PGMPAGE, cWriteLocksY);696 GEN_CHECK_OFF(PGMPAGE, u1 6TrackingY);693 GEN_CHECK_OFF(PGMPAGE, u1.bit.HCPhysAndPageID); 694 GEN_CHECK_OFF(PGMPAGE, u1.bit.cReadLocksY); 695 GEN_CHECK_OFF(PGMPAGE, u1.bit.cWriteLocksY); 696 GEN_CHECK_OFF(PGMPAGE, u1.bit.u16TrackingY); 697 697 GEN_CHECK_SIZE(PGMRAMRANGE); 698 698 GEN_CHECK_OFF(PGMRAMRANGE, pNextR3);
Note:
See TracChangeset
for help on using the changeset viewer.