VirtualBox

Changeset 74047 in vbox for trunk/src


Ignore:
Timestamp:
Sep 3, 2018 4:10:27 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
124803
Message:

VMM/IEM, HM: Nested VMX: bugref:9180 vmlaunch/vmresume bits.

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

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

    r74043 r74047  
    3434{
    3535    /* Internal processing errors. */
    36     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_1                         , "Ipe_1"                  ),
    37     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_2                         , "Ipe_2"                  ),
    38     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_3                         , "Ipe_3"                  ),
    39     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_4                         , "Ipe_4"                  ),
    40     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_5                         , "Ipe_5"                  ),
    41     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_6                         , "Ipe_6"                  ),
    42     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_7                         , "Ipe_7"                  ),
    43     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_8                         , "Ipe_8"                  ),
    44     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_9                         , "Ipe_9"                  ),
     36    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_1                            , "Ipe_1"                  ),
     37    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_2                            , "Ipe_2"                  ),
     38    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_3                            , "Ipe_3"                  ),
     39    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_4                            , "Ipe_4"                  ),
     40    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_5                            , "Ipe_5"                  ),
     41    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_6                            , "Ipe_6"                  ),
     42    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_7                            , "Ipe_7"                  ),
     43    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_8                            , "Ipe_8"                  ),
     44    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_9                            , "Ipe_9"                  ),
    4545    /* VMXON. */
    46     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_A20M                    , "A20M"                   ),
    47     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cpl                     , "Cpl"                    ),
    48     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr0Fixed0               , "Cr0Fixed0"              ),
    49     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr4Fixed0               , "Cr4Fixed0"              ),
    50     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Intercept               , "Intercept"              ),
    51     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_LongModeCS              , "LongModeCS"             ),
    52     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_MsrFeatCtl              , "MsrFeatCtl"             ),
    53     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAbnormal             , "PtrAbnormal"            ),
    54     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAlign                , "PtrAlign"               ),
    55     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrMap                  , "PtrMap"                 ),
    56     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrPhysRead             , "PtrPhysRead"            ),
    57     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrWidth                , "PtrWidth"               ),
    58     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_RealOrV86Mode           , "RealOrV86Mode"          ),
    59     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Success                 , "Success"                ),
    60     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_ShadowVmcs              , "ShadowVmcs"             ),
    61     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxAlreadyRoot          , "VmxAlreadyRoot"         ),
    62     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Vmxe                    , "Vmxe"                   ),
    63     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmcsRevId               , "VmcsRevId"              ),
    64     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxRootCpl              , "VmxRootCpl"             ),
     46    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_A20M                       , "A20M"                   ),
     47    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cpl                        , "Cpl"                    ),
     48    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr0Fixed0                  , "Cr0Fixed0"              ),
     49    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr4Fixed0                  , "Cr4Fixed0"              ),
     50    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Intercept                  , "Intercept"              ),
     51    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_LongModeCS                 , "LongModeCS"             ),
     52    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_MsrFeatCtl                 , "MsrFeatCtl"             ),
     53    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAbnormal                , "PtrAbnormal"            ),
     54    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAlign                   , "PtrAlign"               ),
     55    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrMap                     , "PtrMap"                 ),
     56    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrPhysRead                , "PtrPhysRead"            ),
     57    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrWidth                   , "PtrWidth"               ),
     58    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_RealOrV86Mode              , "RealOrV86Mode"          ),
     59    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Success                    , "Success"                ),
     60    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_ShadowVmcs                 , "ShadowVmcs"             ),
     61    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxAlreadyRoot             , "VmxAlreadyRoot"         ),
     62    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Vmxe                       , "Vmxe"                   ),
     63    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmcsRevId                  , "VmcsRevId"              ),
     64    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxRootCpl                 , "VmxRootCpl"             ),
    6565    /* VMXOFF. */
    66     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Cpl                    , "Cpl"                    ),
    67     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Intercept              , "Intercept"              ),
    68     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_LongModeCS             , "LongModeCS"             ),
    69     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_RealOrV86Mode          , "RealOrV86Mode"          ),
    70     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Success                , "Success"                ),
    71     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Vmxe                   , "Vmxe"                   ),
    72     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_VmxRoot                , "VmxRoot"                ),
     66    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Cpl                       , "Cpl"                    ),
     67    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Intercept                 , "Intercept"              ),
     68    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_LongModeCS                , "LongModeCS"             ),
     69    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_RealOrV86Mode             , "RealOrV86Mode"          ),
     70    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Success                   , "Success"                ),
     71    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Vmxe                      , "Vmxe"                   ),
     72    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_VmxRoot                   , "VmxRoot"                ),
    7373    /* VMPTRLD. */
    74     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Cpl                   , "Cpl"                    ),
    75     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_LongModeCS            , "LongModeCS"             ),
    76     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAbnormal           , "PtrAbnormal"            ),
    77     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAlign              , "PtrAlign"               ),
    78     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrMap                , "PtrMap"                 ),
    79     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrReadPhys           , "PtrReadPhys"            ),
    80     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrVmxon              , "PtrVmxon"               ),
    81     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrWidth              , "PtrWidth"               ),
    82     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_RealOrV86Mode         , "RealOrV86Mode"          ),
    83     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_ShadowVmcs            , "ShadowVmcs"             ),
    84     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Success               , "Success"                ),
    85     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmcsRevId             , "VmcsRevId"              ),
    86     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmxRoot               , "VmxRoot"                ),
     74    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Cpl                      , "Cpl"                    ),
     75    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_LongModeCS               , "LongModeCS"             ),
     76    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAbnormal              , "PtrAbnormal"            ),
     77    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAlign                 , "PtrAlign"               ),
     78    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrMap                   , "PtrMap"                 ),
     79    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrReadPhys              , "PtrReadPhys"            ),
     80    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrVmxon                 , "PtrVmxon"               ),
     81    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrWidth                 , "PtrWidth"               ),
     82    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_RealOrV86Mode            , "RealOrV86Mode"          ),
     83    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_ShadowVmcs               , "ShadowVmcs"             ),
     84    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Success                  , "Success"                ),
     85    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmcsRevId                , "VmcsRevId"              ),
     86    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmxRoot                  , "VmxRoot"                ),
    8787    /* VMPTRST. */
    88     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Cpl                   , "Cpl"                    ),
    89     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_LongModeCS            , "LongModeCS"             ),
    90     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_PtrMap                , "PtrMap"                 ),
    91     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_RealOrV86Mode         , "RealOrV86Mode"          ),
    92     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Success               , "Success"                ),
    93     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_VmxRoot               , "VmxRoot"                ),
     88    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Cpl                      , "Cpl"                    ),
     89    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_LongModeCS               , "LongModeCS"             ),
     90    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_PtrMap                   , "PtrMap"                 ),
     91    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_RealOrV86Mode            , "RealOrV86Mode"          ),
     92    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Success                  , "Success"                ),
     93    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_VmxRoot                  , "VmxRoot"                ),
    9494    /* VMCLEAR. */
    95     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Cpl                   , "Cpl"                    ),
    96     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_LongModeCS            , "LongModeCS"             ),
    97     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAbnormal           , "PtrAbnormal"            ),
    98     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAlign              , "PtrAlign"               ),
    99     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrMap                , "PtrMap"                 ),
    100     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrReadPhys           , "PtrReadPhys"            ),
    101     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrVmxon              , "PtrVmxon"               ),
    102     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrWidth              , "PtrWidth"               ),
    103     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_RealOrV86Mode         , "RealOrV86Mode"          ),
    104     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Success               , "Success"                ),
    105     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_VmxRoot               , "VmxRoot"                ),
     95    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Cpl                      , "Cpl"                    ),
     96    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_LongModeCS               , "LongModeCS"             ),
     97    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAbnormal              , "PtrAbnormal"            ),
     98    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAlign                 , "PtrAlign"               ),
     99    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrMap                   , "PtrMap"                 ),
     100    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrReadPhys              , "PtrReadPhys"            ),
     101    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrVmxon                 , "PtrVmxon"               ),
     102    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrWidth                 , "PtrWidth"               ),
     103    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_RealOrV86Mode            , "RealOrV86Mode"          ),
     104    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Success                  , "Success"                ),
     105    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_VmxRoot                  , "VmxRoot"                ),
    106106    /* VMWRITE. */
    107     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Cpl                   , "Cpl"                    ),
    108     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldInvalid          , "FieldInvalid"           ),
    109     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldRo               , "FieldRo"                ),
    110     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LinkPtrInvalid        , "LinkPtrInvalid"         ),
    111     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LongModeCS            , "LongModeCS"             ),
    112     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrInvalid            , "PtrInvalid"             ),
    113     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrMap                , "PtrMap"                 ),
    114     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_RealOrV86Mode         , "RealOrV86Mode"          ),
    115     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Success               , "Success"                ),
    116     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_VmxRoot               , "VmxRoot"                ),
     107    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Cpl                      , "Cpl"                    ),
     108    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldInvalid             , "FieldInvalid"           ),
     109    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldRo                  , "FieldRo"                ),
     110    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LinkPtrInvalid           , "LinkPtrInvalid"         ),
     111    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LongModeCS               , "LongModeCS"             ),
     112    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrInvalid               , "PtrInvalid"             ),
     113    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrMap                   , "PtrMap"                 ),
     114    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_RealOrV86Mode            , "RealOrV86Mode"          ),
     115    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Success                  , "Success"                ),
     116    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_VmxRoot                  , "VmxRoot"                ),
    117117    /* VMREAD. */
    118     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Cpl                    , "Cpl"                    ),
    119     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_FieldInvalid           , "FieldInvalid"           ),
    120     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LinkPtrInvalid         , "LinkPtrInvalid"         ),
    121     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LongModeCS             , "LongModeCS"             ),
    122     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrInvalid             , "PtrInvalid"             ),
    123     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrMap                 , "PtrMap"                 ),
    124     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_RealOrV86Mode          , "RealOrV86Mode"          ),
    125     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Success                , "Success"                ),
    126     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_VmxRoot                , "VmxRoot"                ),
     118    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Cpl                       , "Cpl"                    ),
     119    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_FieldInvalid              , "FieldInvalid"           ),
     120    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LinkPtrInvalid            , "LinkPtrInvalid"         ),
     121    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LongModeCS                , "LongModeCS"             ),
     122    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrInvalid                , "PtrInvalid"             ),
     123    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrMap                    , "PtrMap"                 ),
     124    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_RealOrV86Mode             , "RealOrV86Mode"          ),
     125    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Success                   , "Success"                ),
     126    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_VmxRoot                   , "VmxRoot"                ),
    127127    /* VMLAUNCH/VMRESUME. */
    128     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_BlocKMovSS            , "BlockMovSS"             ),
    129     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Cpl                   , "Cpl"                    ),
    130     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Cr3TargetCount        , "Cr3TargetCount"         ),
    131     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_LongModeCS            , "LongModeCS"             ),
    132     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PinCtlsAllowed1       , "PinCtlsAllowed1"        ),
    133     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PinCtlsDisallowed0    , "PinCtlsDisallowed0"     ),
    134     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtlsAllowed1      , "ProcCtlsAllowed1"       ),
    135     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtlsDisallowed0   , "ProcCtlsDisallowed0"    ),
    136     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtls2Allowed1     , "ProcCtls2Allowed1"      ),
    137     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtls2Disallowed0  , "ProcCtls2Disallowed0"   ),
    138     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PtrInvalid            , "PtrInvalid"             ),
    139     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PtrReadPhys           , "PtrReadPhys"            ),
    140     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_RealOrV86Mode         , "RealOrV86Mode"          ),
    141     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Success               , "Success"                ),
    142     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmcsClear             , "VmcsClear"              ),
    143     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmcsLaunch            , "VmcsLaunch"             ),
    144     VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmxRoot               , "VmxRoot"                )
     128    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_AddrIoBitmapA            , "AddrIoBitmapA"          ),
     129    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_AddrIoBitmapB            , "AddrIoBitmapB"          ),
     130    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_AddrMsrBitmap            , "AddrMsrBitmap"          ),
     131    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_AddrVirtApicPage         , "AddrVirtApicPage"       ),
     132    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_BlocKMovSS               , "BlockMovSS"             ),
     133    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Cpl                      , "Cpl"                    ),
     134    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Cr3TargetCount           , "Cr3TargetCount"         ),
     135    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_LongModeCS               , "LongModeCS"             ),
     136    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_NmiWindowExit            , "NmiWindowExit"          ),
     137    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PinCtlsAllowed1          , "PinCtlsAllowed1"        ),
     138    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PinCtlsDisallowed0       , "PinCtlsDisallowed0"     ),
     139    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtlsAllowed1         , "ProcCtlsAllowed1"       ),
     140    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtlsDisallowed0      , "ProcCtlsDisallowed0"    ),
     141    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtls2Allowed1        , "ProcCtls2Allowed1"      ),
     142    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_ProcCtls2Disallowed0     , "ProcCtls2Disallowed0"   ),
     143    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PtrInvalid               , "PtrInvalid"             ),
     144    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_PtrReadPhys              , "PtrReadPhys"            ),
     145    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_RealOrV86Mode            , "RealOrV86Mode"          ),
     146    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_Success                  , "Success"                ),
     147    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_TprThreshold             , "TprThreshold"           ),
     148    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_TprThresholdVTpr         , "TprThresholdVTpr"       ),
     149    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VirtApicPagePtrReadPhys  , "VirtApicPageReadPhys"   ),
     150    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VirtNmi                  , "VirtNmi"                ),
     151    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmcsClear                , "VmcsClear"              ),
     152    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmcsLaunch               , "VmcsLaunch"             ),
     153    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmentry_VmxRoot                  , "VmxRoot"                )
    145154    /* kVmxVInstrDiag_Last */
    146155};
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h

    r74043 r74047  
    158158        /*    12 */ RT_OFFSETOF(VMXVVMCS, u32EntryXcptErrCode),
    159159        /*    13 */ RT_OFFSETOF(VMXVVMCS, u32EntryInstrLen),
    160         /*    14 */ RT_OFFSETOF(VMXVVMCS, u32TprTreshold),
     160        /*    14 */ RT_OFFSETOF(VMXVVMCS, u32TprThreshold),
    161161        /*    15 */ RT_OFFSETOF(VMXVVMCS, u32ProcCtls2),
    162162        /*    16 */ RT_OFFSETOF(VMXVVMCS, u32PleGap),
     
    19611961     * See Intel spec. 26.2.1.1 "VM-Execution Control Fields".
    19621962     */
    1963     PCVMXVVMCS pVmcs = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pVmcs);
     1963    PVMXVVMCS pVmcs = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pVmcs);
    19641964
    19651965    /* Pin-based VM-execution controls. */
     
    20172017        }
    20182018    }
     2019    else
     2020        pVmcs->u32ProcCtls2 = 0;
    20192021
    20202022    /* CR3-target count. */
     
    20232025        Log(("%s: CR3-target count exceeded %#x -> VMFail\n", pszInstr, pVmcs->u32Cr3TargetCount));
    20242026        pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_Cr3TargetCount;
     2027        return VERR_VMX_VMENTRY_FAILED;
     2028    }
     2029
     2030    /* IO bitmaps physical addresses. */
     2031    uint8_t const cMaxPhysAddrWidth = IEM_GET_GUEST_CPU_FEATURES(pVCpu)->cMaxPhysAddrWidth;
     2032    Assert(!VMX_V_VMCS_PHYSADDR_4G_LIMIT);
     2033    if (pVmcs->u32ProcCtls & VMX_PROC_CTLS_USE_IO_BITMAPS)
     2034    {
     2035        if (   (pVmcs->u64AddrIoBitmapA.u & X86_PAGE_4K_OFFSET_MASK)
     2036            || (pVmcs->u64AddrIoBitmapA.u >> cMaxPhysAddrWidth))
     2037        {
     2038            Log(("%s: I/O Bitmap A physaddr invalid %#RX64 -> VMFail\n", pszInstr, pVmcs->u64AddrIoBitmapA.u));
     2039            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_AddrIoBitmapA;
     2040            return VERR_VMX_VMENTRY_FAILED;
     2041        }
     2042
     2043        if (   (pVmcs->u64AddrIoBitmapB.u & X86_PAGE_4K_OFFSET_MASK)
     2044            || (pVmcs->u64AddrIoBitmapB.u >> cMaxPhysAddrWidth))
     2045        {
     2046            Log(("%s: I/O Bitmap B physaddr invalid %#RX64 -> VMFail\n", pszInstr, pVmcs->u64AddrIoBitmapB.u));
     2047            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_AddrIoBitmapB;
     2048            return VERR_VMX_VMENTRY_FAILED;
     2049        }
     2050    }
     2051
     2052    /* MSR bitmap physical address. */
     2053    if (pVmcs->u32ProcCtls & VMX_PROC_CTLS_USE_MSR_BITMAPS)
     2054    {
     2055        if (   (pVmcs->u64AddrMsrBitmap.u & X86_PAGE_4K_OFFSET_MASK)
     2056            || (pVmcs->u64AddrMsrBitmap.u >> cMaxPhysAddrWidth)
     2057            || !PGMPhysIsGCPhysNormal(pVCpu->CTX_SUFF(pVM), pVmcs->u64AddrMsrBitmap.u))
     2058        {
     2059            Log(("%s: MSR Bitmap physaddr invalid %#RX64 -> VMFail\n", pszInstr, pVmcs->u64AddrMsrBitmap.u));
     2060            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_AddrMsrBitmap;
     2061            return VERR_VMX_VMENTRY_FAILED;
     2062        }
     2063    }
     2064
     2065    /* TPR shadow related controls. */
     2066    if (pVmcs->u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
     2067    {
     2068        /* Virtual-APIC page physical address. */
     2069        RTGCPHYS GCPhysVirtApic = pVmcs->u64AddrVirtApic.u;
     2070        if (   (GCPhysVirtApic & X86_PAGE_4K_OFFSET_MASK)
     2071            || (GCPhysVirtApic >> cMaxPhysAddrWidth)
     2072            || !PGMPhysIsGCPhysNormal(pVCpu->CTX_SUFF(pVM), GCPhysVirtApic))
     2073        {
     2074            Log(("%s: Virtual-APIC page physaddr invalid %#RX64 -> VMFail\n", pszInstr, GCPhysVirtApic));
     2075            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_AddrVirtApicPage;
     2076            return VERR_VMX_VMENTRY_FAILED;
     2077        }
     2078
     2079        /* Read the Virtual-APIC page. */
     2080        int rc = PGMPhysSimpleReadGCPhys(pVCpu->CTX_SUFF(pVM), pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVirtApicPage),
     2081                                         GCPhysVirtApic, VMX_V_VIRT_APIC_PAGES);
     2082        if (RT_FAILURE(rc))
     2083        {
     2084            Log(("%s: Failed to read Virtual-APIC page at %#RGp, rc=%Rrc\n", pszInstr, GCPhysVirtApic, rc));
     2085            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_VirtApicPagePtrReadPhys;
     2086            return rc;
     2087        }
     2088
     2089        /* TPR threshold without virtual-interrupt delivery. */
     2090        if (   !(pVmcs->u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_INT_DELIVERY)
     2091            &&  (pVmcs->u32TprThreshold & VMX_TPR_THRESHOLD_MASK))
     2092        {
     2093            Log(("%s: TPR-threshold (%#RX32) invalid -> VMFail\n", pszInstr, pVmcs->u32TprThreshold));
     2094            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_TprThreshold;
     2095            return VERR_VMX_VMENTRY_FAILED;
     2096        }
     2097
     2098        /* TPR threshold and VTPR. */
     2099        uint8_t const *pbVirtApic = (uint8_t *)pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvVirtApicPage);
     2100        uint8_t const u8VTpr = *(pbVirtApic + XAPIC_OFF_TPR);
     2101        if (   !(pVmcs->u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_APIC_ACCESS)
     2102            && !(pVmcs->u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_INT_DELIVERY)
     2103            && RT_BF_GET(pVmcs->u32TprThreshold, VMX_BF_TPR_THRESHOLD_TPR) > ((u8VTpr >> 4) & UINT32_C(0xf)) /* Bits 4:7 */)
     2104        {
     2105            Log(("%s: TPR-threshold (%#x) exceeds VTPR (%#x) -> VMFail\n", pszInstr,
     2106                 (pVmcs->u32TprThreshold & VMX_TPR_THRESHOLD_MASK), u8VTpr));
     2107            pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_TprThresholdVTpr;
     2108            return VERR_VMX_VMENTRY_FAILED;
     2109        }
     2110    }
     2111
     2112    /* NMI exiting and virtual-NMIs. */
     2113    if (   !(pVmcs->u32PinCtls & VMX_PIN_CTLS_NMI_EXIT)
     2114        &&  (pVmcs->u32PinCtls & VMX_PIN_CTLS_VIRT_NMI))
     2115    {
     2116        Log(("%s: Virtual-NMIs invalid without NMI-exiting -> VMFail\n", pszInstr));
     2117        pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_VirtNmi;
     2118        return VERR_VMX_VMENTRY_FAILED;
     2119    }
     2120
     2121    /* Virtual-NMIs and NMI-window exiting. */
     2122    if (   !(pVmcs->u32PinCtls & VMX_PIN_CTLS_VIRT_NMI)
     2123        && (pVmcs->u32ProcCtls & VMX_PROC_CTLS_NMI_WINDOW_EXIT))
     2124    {
     2125        Log(("%s: NMI-window exiting invalid without virtual-NMIs -> VMFail\n", pszInstr));
     2126        pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmentry_NmiWindowExit;
    20252127        return VERR_VMX_VMENTRY_FAILED;
    20262128    }
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r74016 r74047  
    34123412DECLINLINE(int) hmR0VmxApicSetTprThreshold(PVMCPU pVCpu, uint32_t u32TprThreshold)
    34133413{
    3414     Assert(!(u32TprThreshold & 0xfffffff0));         /* Bits 31:4 MBZ. */
     3414    Assert(!(u32TprThreshold & ~VMX_TPR_THRESHOLD_MASK));         /* Bits 31:4 MBZ. */
    34153415    Assert(pVCpu->hm.s.vmx.u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW); RT_NOREF_PV(pVCpu);
    34163416    return VMXWriteVmcs32(VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r73870 r74047  
    916916            pVCpu->cpum.s.Guest.hwvirt.vmx.pVmcsR3 = NULL;
    917917        }
     918        if (pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3)
     919        {
     920            SUPR3PageFreeEx(pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3, VMX_V_VIRT_APIC_PAGES);
     921            pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3 = NULL;
     922        }
    918923    }
    919924}
     
    948953            Assert(!pVCpu->cpum.s.Guest.hwvirt.vmx.pVmcsR3);
    949954            LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VMCS\n", pVCpu->idCpu, VMX_V_VMCS_PAGES));
     955            break;
     956        }
     957
     958        /*
     959         * Allocate the Virtual-APIC page.
     960         */
     961        Assert(!pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3);
     962        rc = SUPR3PageAllocEx(VMX_V_VIRT_APIC_PAGES, 0 /* fFlags */, &pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3,
     963                              &pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR0, NULL /* paPages */);
     964        if (RT_FAILURE(rc))
     965        {
     966            Assert(!pVCpu->cpum.s.Guest.hwvirt.vmx.pvVirtApicPageR3);
     967            LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's Virtual-APIC page\n", pVCpu->idCpu,
     968                    VMX_V_VIRT_APIC_PAGES));
    950969            break;
    951970        }
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