VirtualBox

Changeset 47635 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Aug 9, 2013 12:57:57 PM (11 years ago)
Author:
vboxsync
Message:

VMM/HM: Implemented VMX guest-state checks in accordance with the Intel spec.
Any errors founds now flow to the release log.

File:
1 edited

Legend:

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

    r47445 r47635  
    9393AssertCompileMemberOffset(VMXRESTOREHOST, uHostFSBase,    40);
    9494AssertCompileSize(VMXRESTOREHOST, 56);
     95
     96/** @name VMX HM-error codes for VERR_VMX_INVALID_GUEST_STATE.
     97 * @{
     98 */
     99/** An error occurred while checking invalid-guest-state. */
     100#define VMX_IGS_ERROR                                           0
     101/** The invalid guest-state checks did not find any reason why. */
     102#define VMX_IGS_REASON_NOT_FOUND                                1
     103/** CR0 fixed1 bits invalid. */
     104#define VMX_IGS_CR0_FIXED1                                      2
     105/** CR0 fixed0 bits invalid. */
     106#define VMX_IGS_CR0_FIXED0                                      3
     107/** CR0.PE and CR0.PE invalid VT-x/host combination. */
     108#define VMX_IGS_CR0_PG_PE_COMBO                                 4
     109/** CR4 fixed1 bits invalid. */
     110#define VMX_IGS_CR4_FIXED1                                      5
     111/** CR4 fixed0 bits invalid. */
     112#define VMX_IGS_CR4_FIXED0                                      6
     113/** Reserved bits in VMCS' DEBUGCTL MSR field not set to 0 when
     114 *  VMX_VMCS_CTRL_ENTRY_LOAD_DEBUG is used. */
     115#define VMX_IGS_DEBUGCTL_MSR_RESERVED                           7
     116/** CR0.PG not set for long-mode when not using unrestricted guest. */
     117#define VMX_IGS_CR0_PG_LONGMODE                                 8
     118/** CR4.PAE not set for long-mode guest when not using unrestricted guest. */
     119#define VMX_IGS_CR4_PAE_LONGMODE                                9
     120/** CR4.PCIDE set for 32-bit guest. */
     121#define VMX_IGS_CR4_PCIDE                                       10
     122/** VMCS' DR7 reserved bits not set to 0. */
     123#define VMX_IGS_DR7_RESERVED                                    11
     124/** VMCS' PERF_GLOBAL MSR reserved bits not set to 0. */
     125#define VMX_IGS_PERF_GLOBAL_MSR_RESERVED                        12
     126/** VMCS' EFER MSR reserved bits not set to 0. */
     127#define VMX_IGS_EFER_MSR_RESERVED                               13
     128/** VMCS' EFER MSR.LMA does not match the IA32e mode guest control. */
     129#define VMX_IGS_EFER_LMA_GUEST_MODE_MISMATCH                    14
     130/** VMCS' EFER MSR.LMA does not match CR0.PG of the guest when not using
     131 *  unrestricted guest. */
     132#define VMX_IGS_EFER_LMA_PG_MISMATCH                            15
     133/** CS.Attr.P bit invalid. */
     134#define VMX_IGS_CS_ATTR_P_INVALID                               16
     135/** CS.Attr reserved bits not set to 0.  */
     136#define VMX_IGS_CS_ATTR_RESERVED                                17
     137/** CS.Attr.G bit invalid. */
     138#define VMX_IGS_CS_ATTR_G_INVALID                               18
     139/** CS is unusable. */
     140#define VMX_IGS_CS_ATTR_UNUSABLE                                19
     141/** CS and SS DPL unequal. */
     142#define VMX_IGS_CS_SS_ATTR_DPL_UNEQUAL                          20
     143/** CS and SS DPL mismatch. */
     144#define VMX_IGS_CS_SS_ATTR_DPL_MISMATCH                         21
     145/** CS Attr.Type invalid. */
     146#define VMX_IGS_CS_ATTR_TYPE_INVALID                            22
     147/** CS and SS RPL unequal. */
     148#define VMX_IGS_SS_CS_RPL_UNEQUAL                               23
     149/** SS.Attr.DPL and SS RPL unequal. */
     150#define VMX_IGS_SS_ATTR_DPL_RPL_UNEQUAL                         24
     151/** SS.Attr.DPL invalid for segment type. */
     152#define VMX_IGS_SS_ATTR_DPL_INVALID                             25
     153/** SS.Attr.Type invalid. */
     154#define VMX_IGS_SS_ATTR_TYPE_INVALID                            26
     155/** SS.Attr.P bit invalid. */
     156#define VMX_IGS_SS_ATTR_P_INVALID                               27
     157/** SS.Attr reserved bits not set to 0. */
     158#define VMX_IGS_SS_ATTR_RESERVED                                28
     159/** SS.Attr.G bit invalid. */
     160#define VMX_IGS_SS_ATTR_G_INVALID                               29
     161/** DS.Attr.A bit invalid. */
     162#define VMX_IGS_DS_ATTR_A_INVALID                               30
     163/** DS.Attr.P bit invalid. */
     164#define VMX_IGS_DS_ATTR_P_INVALID                               31
     165/** DS.Attr.DPL and DS RPL unequal. */
     166#define VMX_IGS_DS_ATTR_DPL_RPL_UNEQUAL                         32
     167/** DS.Attr reserved bits not set to 0. */
     168#define VMX_IGS_DS_ATTR_RESERVED                                33
     169/** DS.Attr.G bit invalid. */
     170#define VMX_IGS_DS_ATTR_G_INVALID                               34
     171/** DS.Attr.Type invalid. */
     172#define VMX_IGS_DS_ATTR_TYPE_INVALID                            35
     173/** ES.Attr.A bit invalid. */
     174#define VMX_IGS_ES_ATTR_A_INVALID                               36
     175/** ES.Attr.P bit invalid. */
     176#define VMX_IGS_ES_ATTR_P_INVALID                               37
     177/** ES.Attr.DPL and DS RPL unequal. */
     178#define VMX_IGS_ES_ATTR_DPL_RPL_UNEQUAL                         38
     179/** ES.Attr reserved bits not set to 0. */
     180#define VMX_IGS_ES_ATTR_RESERVED                                39
     181/** ES.Attr.G bit invalid. */
     182#define VMX_IGS_ES_ATTR_G_INVALID                               40
     183/** ES.Attr.Type invalid. */
     184#define VMX_IGS_ES_ATTR_TYPE_INVALID                            41
     185/** FS.Attr.A bit invalid. */
     186#define VMX_IGS_FS_ATTR_A_INVALID                               42
     187/** FS.Attr.P bit invalid. */
     188#define VMX_IGS_FS_ATTR_P_INVALID                               43
     189/** FS.Attr.DPL and DS RPL unequal. */
     190#define VMX_IGS_FS_ATTR_DPL_RPL_UNEQUAL                         44
     191/** FS.Attr reserved bits not set to 0. */
     192#define VMX_IGS_FS_ATTR_RESERVED                                45
     193/** FS.Attr.G bit invalid. */
     194#define VMX_IGS_FS_ATTR_G_INVALID                               46
     195/** FS.Attr.Type invalid. */
     196#define VMX_IGS_FS_ATTR_TYPE_INVALID                            47
     197/** GS.Attr.A bit invalid. */
     198#define VMX_IGS_GS_ATTR_A_INVALID                               48
     199/** GS.Attr.P bit invalid. */
     200#define VMX_IGS_GS_ATTR_P_INVALID                               49
     201/** GS.Attr.DPL and DS RPL unequal. */
     202#define VMX_IGS_GS_ATTR_DPL_RPL_UNEQUAL                         50
     203/** GS.Attr reserved bits not set to 0. */
     204#define VMX_IGS_GS_ATTR_RESERVED                                51
     205/** GS.Attr.G bit invalid. */
     206#define VMX_IGS_GS_ATTR_G_INVALID                               52
     207/** GS.Attr.Type invalid. */
     208#define VMX_IGS_GS_ATTR_TYPE_INVALID                            53
     209/** V86 mode CS.Base invalid. */
     210#define VMX_IGS_V86_CS_BASE_INVALID                             54
     211/** V86 mode CS.Limit invalid. */
     212#define VMX_IGS_V86_CS_LIMIT_INVALID                            55
     213/** V86 mode CS.Attr invalid. */
     214#define VMX_IGS_V86_CS_ATTR_INVALID                             56
     215/** V86 mode SS.Base invalid. */
     216#define VMX_IGS_V86_SS_BASE_INVALID                             57
     217/** V86 mode SS.Limit invalid. */
     218#define VMX_IGS_V86_SS_LIMIT_INVALID                            59
     219/** V86 mode SS.Attr invalid. */
     220#define VMX_IGS_V86_SS_ATTR_INVALID                             59
     221/** V86 mode DS.Base invalid. */
     222#define VMX_IGS_V86_DS_BASE_INVALID                             60
     223/** V86 mode DS.Limit invalid. */
     224#define VMX_IGS_V86_DS_LIMIT_INVALID                            61
     225/** V86 mode DS.Attr invalid. */
     226#define VMX_IGS_V86_DS_ATTR_INVALID                             62
     227/** V86 mode ES.Base invalid. */
     228#define VMX_IGS_V86_ES_BASE_INVALID                             63
     229/** V86 mode ES.Limit invalid. */
     230#define VMX_IGS_V86_ES_LIMIT_INVALID                            64
     231/** V86 mode ES.Attr invalid. */
     232#define VMX_IGS_V86_ES_ATTR_INVALID                             65
     233/** V86 mode FS.Base invalid. */
     234#define VMX_IGS_V86_FS_BASE_INVALID                             66
     235/** V86 mode FS.Limit invalid. */
     236#define VMX_IGS_V86_FS_LIMIT_INVALID                            67
     237/** V86 mode FS.Attr invalid. */
     238#define VMX_IGS_V86_FS_ATTR_INVALID                             68
     239/** V86 mode GS.Base invalid. */
     240#define VMX_IGS_V86_GS_BASE_INVALID                             69
     241/** V86 mode GS.Limit invalid. */
     242#define VMX_IGS_V86_GS_LIMIT_INVALID                            70
     243/** V86 mode GS.Attr invalid. */
     244#define VMX_IGS_V86_GS_ATTR_INVALID                             71
     245/** Longmode CS.Base invalid. */
     246#define VMX_IGS_LONGMODE_CS_BASE_INVALID                        72
     247/** Longmode SS.Base invalid. */
     248#define VMX_IGS_LONGMODE_SS_BASE_INVALID                        73
     249/** Longmode DS.Base invalid. */
     250#define VMX_IGS_LONGMODE_DS_BASE_INVALID                        74
     251/** Longmode ES.Base invalid. */
     252#define VMX_IGS_LONGMODE_ES_BASE_INVALID                        75
     253/** SYSENTER ESP is not canonical. */
     254#define VMX_IGS_SYSENTER_ESP_NOT_CANONICAL                      76
     255/** SYSENTER EIP is not canonical. */
     256#define VMX_IGS_SYSENTER_EIP_NOT_CANONICAL                      77
     257/** PAT MSR invalid. */
     258#define VMX_IGS_PAT_MSR_INVALID                                 78
     259/** PAT MSR reserved bits not set to 0. */
     260#define VMX_IGS_PAT_MSR_RESERVED                                79
     261/** GDTR.Base is not canonical. */
     262#define VMX_IGS_GDTR_BASE_NOT_CANONICAL                         80
     263/** IDTR.Base is not canonical. */
     264#define VMX_IGS_IDTR_BASE_NOT_CANONICAL                         81
     265/** GDTR.Limit invalid. */
     266#define VMX_IGS_GDTR_LIMIT_INVALID                              82
     267/** IDTR.Limit invalid. */
     268#define VMX_IGS_IDTR_LIMIT_INVALID                              83
     269/** Longmode RIP is invalid. */
     270#define VMX_IGS_LONGMODE_RIP_INVALID                            84
     271/** RFLAGS reserved bits not set to 0. */
     272#define VMX_IGS_RFLAGS_RESERVED                                 85
     273/** RFLAGS RA1 reserved bits not set to 1. */
     274#define VMX_IGS_RFLAGS_RESERVED1                                86
     275/** RFLAGS.VM (V86 mode) invalid. */
     276#define VMX_IGS_RFLAGS_VM_INVALID                               87
     277/** RFLAGS.IF invalid. */
     278#define VMX_IGS_RFLAGS_IF_INVALID                               88
     279/** Activity state invalid. */
     280#define VMX_IGS_ACTIVITY_STATE_INVALID                          89
     281/** Activity state HLT invalid when SS.Attr.DPL is not zero. */
     282#define VMX_IGS_ACTIVITY_STATE_HLT_INVALID                      90
     283/** Activity state ACTIVE invalid when block-by-STI or MOV SS. */
     284#define VMX_IGS_ACTIVITY_STATE_ACTIVE_INVALID                   91
     285/** Activity state SIPI WAIT invalid. */
     286#define VMX_IGS_ACTIVITY_STATE_SIPI_WAIT_INVALID                92
     287/** Interruptibility state reserved bits not set to 0. */
     288#define VMX_IGS_INTERRUPTIBILITY_STATE_RESERVED                 93
     289/** Interruptibility state cannot be block-by-STI -and- MOV SS. */
     290#define VMX_IGS_INTERRUPTIBILITY_STATE_STI_MOVSS_INVALID        94
     291/** Interruptibility state block-by-STI invalid for EFLAGS. */
     292#define VMX_IGS_INTERRUPTIBILITY_STATE_STI_EFL_INVALID          95
     293/** Interruptibility state invalid while trying to deliver external
     294 *  interrupt. */
     295#define VMX_IGS_INTERRUPTIBILITY_STATE_EXT_INT_INVALID          96
     296/** Interruptibility state block-by-MOVSS invalid while trying to deliver an
     297 *  NMI. */
     298#define VMX_IGS_INTERRUPTIBILITY_STATE_MOVSS_INVALID            97
     299/** Interruptibility state block-by-SMI invalid when CPU is not in SMM. */
     300#define VMX_IGS_INTERRUPTIBILITY_STATE_SMI_INVALID              98
     301/** Interruptibility state block-by-SMI invalid when trying to enter SMM. */
     302#define VMX_IGS_INTERRUPTIBILITY_STATE_SMI_SMM_INVALID          99
     303/** Interruptibilty state block-by-STI (maybe) invalid when trying to deliver
     304 *  an NMI. */
     305#define VMX_IGS_INTERRUPTIBILITY_STATE_STI_INVALID              100
     306/** Interruptibility state block-by-NMI invalid when virtual-NMIs control is
     307 *  active. */
     308#define VMX_IGS_INTERRUPTIBILITY_STATE_NMI_INVALID              101
     309/** Pending debug exceptions reserved bits not set to 0. */
     310#define VMX_IGS_PENDING_DEBUG_RESERVED                          102
     311/** Longmode pending debug exceptions reserved bits not set to 0. */
     312#define VMX_IGS_LONGMODE_PENDING_DEBUG_RESERVED                 103
     313/** Pending debug exceptions.BS bit is not set when it should be. */
     314#define VMX_IGS_PENDING_DEBUG_XCPT_BS_NOT_SET                   104
     315/** Pending debug exceptions.BS bit is not clear when it should be. */
     316#define VMX_IGS_PENDING_DEBUG_XCPT_BS_NOT_CLEAR                 105
     317/** VMCS link pointer reserved bits not set to 0. */
     318#define VMX_IGS_VMCS_LINK_PTR_RESERVED                          106
     319/** @} */
    95320
    96321/** @name VMX VMCS-Read cache indices.
     
    11741399 */
    11751400#define VMX_ENTRY_INTERRUPTION_INFO_VALID(a)                      (a & RT_BIT(31))
     1401#define VMX_ENTRY_INTERRUPTION_INFO_TYPE_SHIFT                    8
     1402#define VMX_ENTRY_INTERRUPTION_INFO_TYPE(a)                       ((a >> VMX_ENTRY_INTERRUPTION_INFO_TYPE_SHIFT) & 7)
    11761403/** @} */
    11771404
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