Changeset 67924 in vbox for trunk/include/VBox
- Timestamp:
- Jul 12, 2017 11:12:15 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 116916
- Location:
- trunk/include/VBox/vmm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpum.h
r67258 r67924 1315 1315 } 1316 1316 1317 #ifndef IN_RC 1317 1318 /** 1318 1319 * Checks if the guest VMCB has the specified ctrl/instruction intercept active. … … 1325 1326 DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCCPUMCTX pCtx, uint64_t fIntercept) 1326 1327 { 1327 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u64InterceptCtrl & fIntercept); 1328 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1329 return RT_BOOL(pVmcbCtrl->u64InterceptCtrl & fIntercept); 1328 1330 } 1329 1331 … … 1338 1340 DECLINLINE(bool) CPUMIsGuestSvmReadCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr) 1339 1341 { 1340 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptRdCRx & (1 << uCr)); 1342 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1343 return RT_BOOL(pVmcbCtrl->u16InterceptRdCRx & (1 << uCr)); 1341 1344 } 1342 1345 … … 1351 1354 DECLINLINE(bool) CPUMIsGuestSvmWriteCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr) 1352 1355 { 1353 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptWrCRx & (1 << uCr)); 1356 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1357 return RT_BOOL(pVmcbCtrl->u16InterceptWrCRx & (1 << uCr)); 1354 1358 } 1355 1359 … … 1364 1368 DECLINLINE(bool) CPUMIsGuestSvmReadDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr) 1365 1369 { 1366 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptRdDRx & (1 << uDr)); 1370 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1371 return RT_BOOL(pVmcbCtrl->u16InterceptRdDRx & (1 << uDr)); 1367 1372 } 1368 1373 … … 1377 1382 DECLINLINE(bool) CPUMIsGuestSvmWriteDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr) 1378 1383 { 1379 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptWrDRx & (1 << uDr)); 1384 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1385 return RT_BOOL(pVmcbCtrl->u16InterceptWrDRx & (1 << uDr)); 1380 1386 } 1381 1387 … … 1391 1397 { 1392 1398 Assert(uVector < 32); 1393 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u32InterceptXcpt & (UINT32_C(1) << uVector)); 1399 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1400 return RT_BOOL(pVmcbCtrl->u32InterceptXcpt & (UINT32_C(1) << uVector)); 1394 1401 } 1402 #endif /* !IN_RC */ 1395 1403 1396 1404 /** … … 1406 1414 * See AMD spec. 15.5 "VMRUN instruction" subsection "Canonicalization and Consistency Checks". 1407 1415 */ 1408 return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMRUN); 1416 #ifndef IN_RC 1417 PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl; 1418 return RT_BOOL(pVmcbCtrl->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMRUN); 1419 #else 1420 RT_NOREF(pCtx); 1421 return false; 1422 #endif 1409 1423 } 1410 1424 … … 1417 1431 DECLINLINE(bool) CPUMIsGuestInVmxNestedHwVirtMode(PCCPUMCTX pCtx) 1418 1432 { 1419 RT_NOREF1(pCtx);1420 1433 /** @todo Intel. */ 1434 RT_NOREF(pCtx); 1421 1435 return false; 1422 1436 } -
trunk/include/VBox/vmm/cpum.mac
r66667 r67924 258 258 .abPadding resb 12 259 259 %endif 260 .hwvirt.svm.uMsrHSavePa resq 1 261 .hwvirt.svm.GCPhysVmcb resq 1 262 .hwvirt.svm.VmcbCtrl resb 256 263 .hwvirt.svm.HostState resb 184 264 .hwvirt.svm.fGif resb 1 265 .hwvirt.svm.cPauseFilter resw 1 266 .hwvirt.svm.cPauseFilterThreshold resw 1 267 .hwvirt.svm.fInterceptEvents resb 1 268 .hwvirt.svm.abPadding0 resb 2 269 .hwvirt.svm.pvMsrBitmapR0 RTR0PTR_RES 1 270 .hwvirt.svm.pvMsrBitmapR3 RTR3PTR_RES 1 271 .hwvirt.svm.pvIoBitmapR0 RTR0PTR_RES 1 272 .hwvirt.svm.pvIoBitmapR3 RTR3PTR_RES 1 260 .hwvirt.svm.uMsrHSavePa resq 1 261 .hwvirt.svm.GCPhysVmcb resq 1 262 .hwvirt.svm.pVmcbR0 RTR0PTR_RES 1 263 .hwvirt.svm.pVmcbR3 RTR3PTR_RES 1 273 264 %if HC_ARCH_BITS == 32 274 .hwvirt.svm.abPadding1 resb 16 275 %endif 276 .hwvirt.fLocalForcedActions resd 1 265 .hwvirt.svm.abPadding0 resb 8 266 %endif 267 .hwvirt.svm.HostState resb 184 268 .hwvirt.svm.fGif resb 1 269 .hwvirt.svm.cPauseFilter resw 1 270 .hwvirt.svm.cPauseFilterThreshold resw 1 271 .hwvirt.svm.fInterceptEvents resb 1 272 .hwvirt.svm.abPadding1 resb 2 273 .hwvirt.svm.pvMsrBitmapR0 RTR0PTR_RES 1 274 .hwvirt.svm.pvMsrBitmapR3 RTR3PTR_RES 1 275 .hwvirt.svm.pvIoBitmapR0 RTR0PTR_RES 1 276 .hwvirt.svm.pvIoBitmapR3 RTR3PTR_RES 1 277 %if HC_ARCH_BITS == 32 278 .hwvirt.svm.abPadding2 resb 16 279 %endif 280 .hwvirt.fLocalForcedActions resd 1 277 281 alignb 64 278 282 endstruc -
trunk/include/VBox/vmm/cpumctx.h
r66667 r67924 479 479 /** 736 - Guest physical address of the nested-guest VMCB. */ 480 480 RTGCPHYS GCPhysVmcb; 481 /** 744 - Cache of the nested-guest VMCB control area. */ 482 SVMVMCBCTRL VmcbCtrl; 483 /** 1000 - Guest's host-state save area. */ 481 /** 744 - Cache of the nested-guest VMCB - R0 ptr. */ 482 R0PTRTYPE(PSVMVMCB) pVmcbR0; 483 /** 752 / 748 - Cache of the nested-guest VMCB - R3 ptr. */ 484 R3PTRTYPE(PSVMVMCB) pVmcbR3; 485 #if HC_ARCH_BITS == 32 486 /** NA / 752 - Padding. */ 487 uint8_t abPadding0[8]; 488 #endif 489 /** 760 - Guest's host-state save area. */ 484 490 SVMHOSTSTATE HostState; 485 /** 1184 - Global interrupt flag. */491 /** 944 - Global interrupt flag. */ 486 492 uint8_t fGif; 487 /** 1185 - Pause filter count. */493 /** 945 - Pause filter count. */ 488 494 uint16_t cPauseFilter; 489 /** 1187 - Pause filter count. */495 /** 947 - Pause filter count. */ 490 496 uint16_t cPauseFilterThreshold; 491 /** 1189 - Whether the injected event is subject to event intercepts. */497 /** 949 - Whether the injected event is subject to event intercepts. */ 492 498 uint8_t fInterceptEvents; 493 /** 1190 - Padding. */494 uint8_t abPadding 0[2];495 /** 1192 - MSR permission bitmap - R0 ptr. */499 /** 950 - Padding. */ 500 uint8_t abPadding1[2]; 501 /** 952 - MSR permission bitmap - R0 ptr. */ 496 502 R0PTRTYPE(void *) pvMsrBitmapR0; 497 /** 1200 / 1196 - MSR permission bitmap - R3 ptr. */503 /** 960 / 956 - MSR permission bitmap - R3 ptr. */ 498 504 R3PTRTYPE(void *) pvMsrBitmapR3; 499 /** 1208 / 1200 - IO permission bitmap - R0 ptr. */505 /** 968 / 960 - IO permission bitmap - R0 ptr. */ 500 506 R0PTRTYPE(void *) pvIoBitmapR0; 501 /** 1216 / 1204 - IO permission bitmap - R3 ptr. */507 /** 976 / 964 - IO permission bitmap - R3 ptr. */ 502 508 R3PTRTYPE(void *) pvIoBitmapR3; 503 509 #if HC_ARCH_BITS == 32 504 /** NA / 1200- Padding. */505 uint8_t abPadding 1[16];510 /** NA / 968 - Padding. */ 511 uint8_t abPadding2[16]; 506 512 #endif 507 513 } svm; … … 513 519 } CPUM_UNION_NM(s); 514 520 515 /** 1224 - A subset of force flags that are preserved while running521 /** 984 - A subset of force flags that are preserved while running 516 522 * the nested-guest. */ 517 523 uint32_t fLocalForcedActions; 518 524 /** 1212 - Padding. */ 519 uint8_t abPadding1[ 52];525 uint8_t abPadding1[36]; 520 526 } hwvirt; 521 527 /** @} */ … … 575 581 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.uMsrHSavePa, 728); 576 582 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.GCPhysVmcb, 736); 577 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.VmcbCtrl, 744); 578 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HostState, 1000); 579 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fGif, 1184); 580 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilter, 1185); 581 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilterThreshold, 1187); 582 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents, 1189); 583 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 1192); 584 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR3, HC_ARCH_BITS == 64 ? 1200 : 1196); 585 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0, HC_ARCH_BITS == 64 ? 1208 : 1200); 586 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR3, HC_ARCH_BITS == 64 ? 1216 : 1204); 587 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) fLocalForcedActions, 1224); 583 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0, 744); 584 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR3, HC_ARCH_BITS == 64 ? 752 : 748); 585 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HostState, 760); 586 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fGif, 944); 587 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilter, 945); 588 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilterThreshold, 947); 589 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents, 949); 590 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 952); 591 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR3, HC_ARCH_BITS == 64 ? 960 : 956); 592 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0, HC_ARCH_BITS == 64 ? 968 : 960); 593 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR3, HC_ARCH_BITS == 64 ? 976 : 964); 594 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) fLocalForcedActions, 984); 595 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0, 8); 596 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 8); 597 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0, 8); 588 598 589 599 AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_NM(g.) aGRegs);
Note:
See TracChangeset
for help on using the changeset viewer.