VirtualBox

Changeset 74660 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Oct 8, 2018 6:39:49 AM (6 years ago)
Author:
vboxsync
Message:

VMM/IEM, CPUM: Nested VMX: bugref:9180 VM-exit bits; I/O exit prep work. Also add missing allocation/de-allocation for the shadow VMCS during CPUM init.

Location:
trunk/include/VBox/vmm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/cpumctx.h

    r74542 r74660  
    644644                uint32_t                uMsrBitmapR3;
    645645#endif
    646                 /** 0x378 - Padding. */
    647                 uint8_t             abPadding[0x3f0 - 0x378];
     646                /** 0x378 - The I/O bitmap - R0 ptr. */
     647                R0PTRTYPE(void *)       pvIoBitmapR0;
     648#if HC_ARCH_BITS == 32
     649                uint32_t                uIoBitmapR0;
     650#endif
     651                /** 0x380 - The I/O bitmap - R3 ptr. */
     652                R3PTRTYPE(void *)       pvIoBitmapR3;
     653#if HC_ARCH_BITS == 32
     654                uint32_t                uIoBitmapR3;
     655#endif
     656                /** 0x388 - Padding. */
     657                uint8_t             abPadding[0x3f0 - 0x388];
    648658            } vmx;
    649659        } CPUM_UNION_NM(s);
     
    745755AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pAutoMsrAreaR0,         0x358);
    746756AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pAutoMsrAreaR3,         0x360);
     757AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvMsrBitmapR0,          0x368);
     758AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvMsrBitmapR3,          0x370);
     759AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvIoBitmapR0,           0x378);
     760AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvIoBitmapR3,           0x380);
    747761AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pVmcsR0,           8);
    748762AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pShadowVmcsR0,     8);
     
    752766AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pAutoMsrAreaR0,    8);
    753767AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvMsrBitmapR0,     8);
     768AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvIoBitmapR0,      8);
    754769AssertCompileMemberOffset(CPUMCTX, hwvirt.enmHwvirt,           0x3f0);
    755770AssertCompileMemberOffset(CPUMCTX, hwvirt.fLocalForcedActions, 0x3f4);
  • trunk/include/VBox/vmm/hm.h

    r74545 r74660  
    150150VMM_INT_DECL(int)               HMVmxEntryIntInfoInjectTrpmEvent(PVMCPU pVCpu, uint32_t uEntryIntInfo, uint32_t uErrCode,
    151151                                                                 uint32_t cbInstr, RTGCUINTPTR GCPtrFaultAddress);
    152 VMM_INT_DECL(int)               HMVmxGetMsrPermission(void *pvMsrBitmap, uint32_t idMsr, PVMXMSREXITREAD penmRead,
     152VMM_INT_DECL(int)               HMVmxGetMsrPermission(void const *pvMsrBitmap, uint32_t idMsr, PVMXMSREXITREAD penmRead,
    153153                                                      PVMXMSREXITWRITE penmWrite);
     154VMM_INT_DECL(bool)              HMVmxGetIoBitmapPermission(void const *pvIoBitmapA, void const *pvIoBitmapB, uint16_t uPort);
    154155/** @} */
    155156
  • trunk/include/VBox/vmm/hm_vmx.h

    r74648 r74660  
    25002500#define VMXINSTRID_VMREAD                                       (0x12 | VMXINSTRID_VALID)
    25012501#define VMXINSTRID_VMWRITE                                      (0x13 | VMXINSTRID_VALID | VMXINSTRID_MODRM_PRIMARY_OP_W)
     2502#define VMXINSTRID_IO_IN                                        (0x14 | VMXINSTRID_VALID)
     2503#define VMXINSTRID_IO_OUT                                       (0x15 | VMXINSTRID_VALID)
    25022504/** @} */
    25032505
     
    27262728/** 16-31: IO Port (0-0xffff). */
    27272729#define VMX_EXIT_QUAL_IO_PORT(a)                                (((a) >> 16) & 0xffff)
    2728 /* Rest reserved. */
     2730
     2731/** Bit fields for Exit qualification for I/O instructions. */
     2732#define VMX_BF_EXIT_QUAL_IO_WIDTH_SHIFT                         0
     2733#define VMX_BF_EXIT_QUAL_IO_WIDTH_MASK                          UINT64_C(0x0000000000000007)
     2734#define VMX_BF_EXIT_QUAL_IO_DIRECTION_SHIFT                     3
     2735#define VMX_BF_EXIT_QUAL_IO_DIRECTION_MASK                      UINT64_C(0x0000000000000008)
     2736#define VMX_BF_EXIT_QUAL_IO_IS_STRING_SHIFT                     4
     2737#define VMX_BF_EXIT_QUAL_IO_IS_STRING_MASK                      UINT64_C(0x0000000000000010)
     2738#define VMX_BF_EXIT_QUAL_IO_IS_REP_SHIFT                        5
     2739#define VMX_BF_EXIT_QUAL_IO_IS_REP_MASK                         UINT64_C(0x0000000000000020)
     2740#define VMX_BF_EXIT_QUAL_IO_ENCODING_SHIFT                      6
     2741#define VMX_BF_EXIT_QUAL_IO_ENCODING_MASK                       UINT64_C(0x0000000000000040)
     2742#define VMX_BF_EXIT_QUAL_IO_RSVD_7_15_SHIFT                     7
     2743#define VMX_BF_EXIT_QUAL_IO_RSVD_7_15_MASK                      UINT64_C(0x000000000000ff80)
     2744#define VMX_BF_EXIT_QUAL_IO_PORT_SHIFT                          16
     2745#define VMX_BF_EXIT_QUAL_IO_PORT_MASK                           UINT64_C(0x00000000ffff0000)
     2746#define VMX_BF_EXIT_QUAL_IO_RSVD_32_63_SHIFT                    32
     2747#define VMX_BF_EXIT_QUAL_IO_RSVD_32_63_MASK                     UINT64_C(0xffffffff00000000)
     2748RT_BF_ASSERT_COMPILE_CHECKS(VMX_BF_EXIT_QUAL_IO_, UINT64_C(0), UINT64_MAX,
     2749                            (WIDTH, DIRECTION, IS_STRING, IS_REP, ENCODING, RSVD_7_15, PORT, RSVD_32_63));
    27292750/** @} */
    27302751
     
    30783099#define VMX_V_MSR_BITMAP_PAGES                                  1
    30793100
     3101/** The size of I/O bitmap A (in bytes). */
     3102#define VMX_V_IO_BITMAP_A_SIZE                                  X86_PAGE_4K_SIZE
     3103/** The size of I/O bitmap A (in pages). */
     3104#define VMX_V_IO_BITMAP_A_PAGES                                 1
     3105
     3106/** The size of I/O bitmap B (in bytes). */
     3107#define VMX_V_IO_BITMAP_B_SIZE                                  X86_PAGE_4K_SIZE
     3108/** The size of I/O bitmap B (in pages). */
     3109#define VMX_V_IO_BITMAP_B_PAGES                                 1
     3110
    30803111/** The size of the auto-load/store MSR area (in bytes). */
    30813112#define VMX_V_AUTOMSR_AREA_SIZE                                 ((512 * (VMX_V_AUTOMSR_COUNT_MAX + 1)) * sizeof(VMXAUTOMSR))
     
    31203151typedef const VMXVEXITINFO *PCVMXVEXITINFO;
    31213152AssertCompileMemberAlignment(VMXVEXITINFO, u64Qual, 8);
     3153
    31223154
    31233155/**
Note: See TracChangeset for help on using the changeset viewer.

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