VirtualBox

Changeset 97057 in vbox


Ignore:
Timestamp:
Oct 7, 2022 11:32:51 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154006
Message:

VMM/HMVMXR0: Only use the template functions for reading into VMXTRANSIENT.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h

    r97056 r97057  
    11651165
    11661166#endif /* VBOX_STRICT */
    1167 
    1168 /**
    1169  * Reads the VM-exit interruption-information field from the VMCS into the VMX
    1170  * 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 VMX
    1188  * 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 VMX
    1206  * 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 into
    1224  * 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_VMX
    1291 /**
    1292  * Reads the Guest pending-debug exceptions from the VMCS into the VMX transient
    1293  * 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 #endif
    1308 
    1309 /**
    1310  * Reads the IDT-vectoring information field from the VMCS into the VMX
    1311  * 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 VMX
    1331  * 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 }
    13451167
    13461168
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette