Changeset 104881 in vbox for trunk/src/VBox/VMM/include
- Timestamp:
- Jun 11, 2024 9:05:04 AM (8 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/include/PGMInline.h
r104859 r104881 71 71 DECLINLINE(PPGMRAMRANGE) pgmPhysGetRange(PVMCC pVM, RTGCPHYS GCPhys) 72 72 { 73 PPGMRAMRANGE pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 74 if (!pRam || GCPhys - pRam->GCPhys >= pRam->cb) 75 return pgmPhysGetRangeSlow(pVM, GCPhys); 76 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 77 return pRam; 73 PPGMRAMRANGE const pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 74 if (pRam) 75 { 76 RTGCPHYS const GCPhysFirst = pRam->GCPhys; 77 if (GCPhys - GCPhysFirst < pRam->cb && GCPhys >= GCPhysFirst) 78 { 79 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 80 return pRam; 81 } 82 } 83 return pgmPhysGetRangeSlow(pVM, GCPhys); 78 84 } 79 85 … … 91 97 DECLINLINE(PPGMRAMRANGE) pgmPhysGetRangeAtOrAbove(PVMCC pVM, RTGCPHYS GCPhys) 92 98 { 93 PPGMRAMRANGE pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 94 if ( !pRam 95 || (GCPhys - pRam->GCPhys) >= pRam->cb) 96 return pgmPhysGetRangeAtOrAboveSlow(pVM, GCPhys); 97 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 98 return pRam; 99 PPGMRAMRANGE const pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 100 if (pRam) 101 { 102 RTGCPHYS const GCPhysFirst = pRam->GCPhys; 103 if (GCPhys - GCPhysFirst < pRam->cb && GCPhys >= GCPhysFirst) 104 { 105 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 106 return pRam; 107 } 108 } 109 return pgmPhysGetRangeAtOrAboveSlow(pVM, GCPhys); 99 110 } 100 111 … … 111 122 DECLINLINE(PPGMPAGE) pgmPhysGetPage(PVMCC pVM, RTGCPHYS GCPhys) 112 123 { 113 PPGMRAMRANGE pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 114 RTGCPHYS off; 115 if ( pRam 116 && (off = GCPhys - pRam->GCPhys) < pRam->cb) 117 { 118 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 119 return &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 124 PPGMRAMRANGE const pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 125 if (pRam) 126 { 127 RTGCPHYS const GCPhysFirst = pRam->GCPhys; 128 RTGCPHYS const off = GCPhys - GCPhysFirst; 129 if (off < pRam->cb && GCPhys >= GCPhysFirst) 130 { 131 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 132 return &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 133 } 120 134 } 121 135 return pgmPhysGetPageSlow(pVM, GCPhys); … … 138 152 DECLINLINE(int) pgmPhysGetPageEx(PVMCC pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage) 139 153 { 140 PPGMRAMRANGE pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 141 RTGCPHYS off; 142 if ( !pRam 143 || (off = GCPhys - pRam->GCPhys) >= pRam->cb) 144 return pgmPhysGetPageExSlow(pVM, GCPhys, ppPage); 145 *ppPage = &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 146 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 147 return VINF_SUCCESS; 154 PPGMRAMRANGE const pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 155 if (pRam) 156 { 157 RTGCPHYS const GCPhysFirst = pRam->GCPhys; 158 RTGCPHYS const off = GCPhys - GCPhysFirst; 159 if (off < pRam->cb && GCPhys >= GCPhysFirst) 160 { 161 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 162 *ppPage = &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 163 return VINF_SUCCESS; 164 } 165 } 166 return pgmPhysGetPageExSlow(pVM, GCPhys, ppPage); 148 167 } 149 168 … … 166 185 DECLINLINE(int) pgmPhysGetPageWithHintEx(PVMCC pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage, PPGMRAMRANGE *ppRamHint) 167 186 { 168 RTGCPHYS off;169 187 PPGMRAMRANGE pRam = *ppRamHint; 170 if ( !pRam 171 || RT_UNLIKELY((off = GCPhys - pRam->GCPhys) >= pRam->cb)) 188 RTGCPHYS GCPhysFirst; 189 RTGCPHYS off; 190 if ( !pRam 191 || RT_UNLIKELY( (off = GCPhys - (GCPhysFirst = pRam->GCPhys)) >= pRam->cb 192 && GCPhys >= GCPhysFirst) ) 172 193 { 173 194 pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 174 195 if ( !pRam 175 || (off = GCPhys - pRam->GCPhys) >= pRam->cb) 196 || (off = GCPhys - (GCPhysFirst = pRam->GCPhys)) >= pRam->cb 197 || GCPhys < GCPhysFirst) 176 198 return pgmPhysGetPageAndRangeExSlow(pVM, GCPhys, ppPage, ppRamHint); 177 199 … … 198 220 { 199 221 PPGMRAMRANGE pRam = pVM->CTX_EXPR(pgm, pgmr0, pgm).s.apRamRangesTlb[PGM_RAMRANGE_TLB_IDX(GCPhys)]; 200 RTGCPHYS off; 201 if ( !pRam 202 || (off = GCPhys - pRam->GCPhys) >= pRam->cb) 203 return pgmPhysGetPageAndRangeExSlow(pVM, GCPhys, ppPage, ppRam); 204 205 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 206 *ppRam = pRam; 207 *ppPage = &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 208 return VINF_SUCCESS; 222 if (pRam) 223 { 224 RTGCPHYS const GCPhysFirst = pRam->GCPhys; 225 RTGCPHYS const off = GCPhys - GCPhysFirst; 226 if (off < pRam->cb && GCPhys >= GCPhysFirst) 227 { 228 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 229 *ppRam = pRam; 230 *ppPage = &pRam->aPages[off >> GUEST_PAGE_SHIFT]; 231 return VINF_SUCCESS; 232 } 233 } 234 return pgmPhysGetPageAndRangeExSlow(pVM, GCPhys, ppPage, ppRam); 209 235 } 210 236
Note:
See TracChangeset
for help on using the changeset viewer.