Changeset 97057 in vbox
- Timestamp:
- Oct 7, 2022 11:32:51 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154006
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h
r97056 r97057 1165 1165 1166 1166 #endif /* VBOX_STRICT */ 1167 1168 /**1169 * Reads the VM-exit interruption-information field from the VMCS into the VMX1170 * transient structure.1171 *1172 * @param pVCpu The cross context virtual CPU structure.1173 * @param pVmxTransient The VMX-transient structure.1174 */1175 DECLINLINE(void) vmxHCReadExitIntInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1176 {1177 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INTERRUPTION_INFO))1178 {1179 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO, &pVmxTransient->uExitIntInfo);1180 AssertRC(rc);1181 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INTERRUPTION_INFO;1182 }1183 }1184 1185 1186 /**1187 * Reads the VM-exit interruption error code from the VMCS into the VMX1188 * transient structure.1189 *1190 * @param pVCpu The cross context virtual CPU structure.1191 * @param pVmxTransient The VMX-transient structure.1192 */1193 DECLINLINE(void) vmxHCReadExitIntErrorCodeVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1194 {1195 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE))1196 {1197 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode);1198 AssertRC(rc);1199 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE;1200 }1201 }1202 1203 1204 /**1205 * Reads the VM-exit instruction length field from the VMCS into the VMX1206 * transient structure.1207 *1208 * @param pVCpu The cross context virtual CPU structure.1209 * @param pVmxTransient The VMX-transient structure.1210 */1211 DECLINLINE(void) vmxHCReadExitInstrLenVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1212 {1213 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INSTR_LEN))1214 {1215 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_LENGTH, &pVmxTransient->cbExitInstr);1216 AssertRC(rc);1217 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INSTR_LEN;1218 }1219 }1220 1221 1222 /**1223 * Reads the VM-exit instruction-information field from the VMCS into1224 * the VMX transient structure.1225 *1226 * @param pVCpu The cross context virtual CPU structure.1227 * @param pVmxTransient The VMX-transient structure.1228 */1229 DECLINLINE(void) vmxHCReadExitInstrInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1230 {1231 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INSTR_INFO))1232 {1233 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_INFO, &pVmxTransient->ExitInstrInfo.u);1234 AssertRC(rc);1235 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INSTR_INFO;1236 }1237 }1238 1239 1240 /**1241 * Reads the Exit Qualification from the VMCS into the VMX transient structure.1242 *1243 * @param pVCpu The cross context virtual CPU structure.1244 * @param pVmxTransient The VMX-transient structure.1245 */1246 DECLINLINE(void) vmxHCReadExitQualVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1247 {1248 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_QUALIFICATION))1249 {1250 int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual);1251 AssertRC(rc);1252 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION;1253 }1254 }1255 1256 1257 /**1258 * Reads the Guest-linear address from the VMCS into the VMX transient structure.1259 *1260 * @param pVCpu The cross context virtual CPU structure.1261 * @param pVmxTransient The VMX-transient structure.1262 */1263 DECLINLINE(void) vmxHCReadGuestLinearAddrVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1264 {1265 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_LINEAR_ADDR))1266 {1267 int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr);1268 AssertRC(rc);1269 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_LINEAR_ADDR;1270 }1271 }1272 1273 1274 /**1275 * Reads the Guest-physical address from the VMCS into the VMX transient structure.1276 *1277 * @param pVCpu The cross context virtual CPU structure.1278 * @param pVmxTransient The VMX-transient structure.1279 */1280 DECLINLINE(void) vmxHCReadGuestPhysicalAddrVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1281 {1282 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_PHYSICAL_ADDR))1283 {1284 int rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr);1285 AssertRC(rc);1286 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_PHYSICAL_ADDR;1287 }1288 }1289 1290 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX1291 /**1292 * Reads the Guest pending-debug exceptions from the VMCS into the VMX transient1293 * structure.1294 *1295 * @param pVCpu The cross context virtual CPU structure.1296 * @param pVmxTransient The VMX-transient structure.1297 */1298 DECLINLINE(void) vmxHCReadGuestPendingDbgXctps(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1299 {1300 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_PENDING_DBG_XCPTS))1301 {1302 int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, &pVmxTransient->uGuestPendingDbgXcpts);1303 AssertRC(rc);1304 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_PENDING_DBG_XCPTS;1305 }1306 }1307 #endif1308 1309 /**1310 * Reads the IDT-vectoring information field from the VMCS into the VMX1311 * transient structure.1312 *1313 * @param pVCpu The cross context virtual CPU structure.1314 * @param pVmxTransient The VMX-transient structure.1315 *1316 * @remarks No-long-jump zone!!!1317 */1318 DECLINLINE(void) vmxHCReadIdtVectoringInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1319 {1320 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_IDT_VECTORING_INFO))1321 {1322 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_INFO, &pVmxTransient->uIdtVectoringInfo);1323 AssertRC(rc);1324 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_IDT_VECTORING_INFO;1325 }1326 }1327 1328 1329 /**1330 * Reads the IDT-vectoring error code from the VMCS into the VMX1331 * transient structure.1332 *1333 * @param pVCpu The cross context virtual CPU structure.1334 * @param pVmxTransient The VMX-transient structure.1335 */1336 DECLINLINE(void) vmxHCReadIdtVectoringErrorCodeVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)1337 {1338 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_IDT_VECTORING_ERROR_CODE))1339 {1340 int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_ERROR_CODE, &pVmxTransient->uIdtVectoringErrorCode);1341 AssertRC(rc);1342 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_IDT_VECTORING_ERROR_CODE;1343 }1344 }1345 1167 1346 1168
Note:
See TracChangeset
for help on using the changeset viewer.