VirtualBox

Changeset 61427 in vbox


Ignore:
Timestamp:
Jun 3, 2016 8:25:52 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
107744
Message:

VMM/HM: Handle missing AMD-V exit reasons, cleanup and docs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r61415 r61427  
    7171*   Global Variables                                                                                                             *
    7272*********************************************************************************************************************************/
    73 # define EXIT_REASON(def, val, str) #def " - " #val " - " str
    74 # define EXIT_REASON_NIL() NULL
     73#define EXIT_REASON(def, val, str) #def " - " #val " - " str
     74#define EXIT_REASON_NIL() NULL
    7575/** Exit reason descriptions for VT-x, used to describe statistics. */
    7676static const char * const g_apszVTxExitReasons[MAX_EXITREASON_STAT] =
     
    145145 *
    146146 *  @note AMD-V have annoyingly large gaps (e.g. \#NPF VMEXIT comes at 1024),
    147  *        this array doesn't contain the entire set of exit reasons. */
     147 *        this array doesn't contain the entire set of exit reasons, we
     148 *        handle them via hmSvmGetSpecialExitReasonDesc(). */
    148149static const char * const g_apszAmdVExitReasons[MAX_EXITREASON_STAT] =
    149150{
    150     EXIT_REASON(SVM_EXIT_READ_CR0           ,    0, "Read CR0."),
    151     EXIT_REASON(SVM_EXIT_READ_CR1           ,    1, "Read CR1."),
    152     EXIT_REASON(SVM_EXIT_READ_CR2           ,    2, "Read CR2."),
    153     EXIT_REASON(SVM_EXIT_READ_CR3           ,    3, "Read CR3."),
    154     EXIT_REASON(SVM_EXIT_READ_CR4           ,    4, "Read CR4."),
    155     EXIT_REASON(SVM_EXIT_READ_CR5           ,    5, "Read CR5."),
    156     EXIT_REASON(SVM_EXIT_READ_CR6           ,    6, "Read CR6."),
    157     EXIT_REASON(SVM_EXIT_READ_CR7           ,    7, "Read CR7."),
    158     EXIT_REASON(SVM_EXIT_READ_CR8           ,    8, "Read CR8."),
    159     EXIT_REASON(SVM_EXIT_READ_CR9           ,    9, "Read CR9."),
    160     EXIT_REASON(SVM_EXIT_READ_CR10          ,   10, "Read CR10."),
    161     EXIT_REASON(SVM_EXIT_READ_CR11          ,   11, "Read CR11."),
    162     EXIT_REASON(SVM_EXIT_READ_CR12          ,   12, "Read CR12."),
    163     EXIT_REASON(SVM_EXIT_READ_CR13          ,   13, "Read CR13."),
    164     EXIT_REASON(SVM_EXIT_READ_CR14          ,   14, "Read CR14."),
    165     EXIT_REASON(SVM_EXIT_READ_CR15          ,   15, "Read CR15."),
    166     EXIT_REASON(SVM_EXIT_WRITE_CR0          ,   16, "Write CR0."),
    167     EXIT_REASON(SVM_EXIT_WRITE_CR1          ,   17, "Write CR1."),
    168     EXIT_REASON(SVM_EXIT_WRITE_CR2          ,   18, "Write CR2."),
    169     EXIT_REASON(SVM_EXIT_WRITE_CR3          ,   19, "Write CR3."),
    170     EXIT_REASON(SVM_EXIT_WRITE_CR4          ,   20, "Write CR4."),
    171     EXIT_REASON(SVM_EXIT_WRITE_CR5          ,   21, "Write CR5."),
    172     EXIT_REASON(SVM_EXIT_WRITE_CR6          ,   22, "Write CR6."),
    173     EXIT_REASON(SVM_EXIT_WRITE_CR7          ,   23, "Write CR7."),
    174     EXIT_REASON(SVM_EXIT_WRITE_CR8          ,   24, "Write CR8."),
    175     EXIT_REASON(SVM_EXIT_WRITE_CR9          ,   25, "Write CR9."),
    176     EXIT_REASON(SVM_EXIT_WRITE_CR10         ,   26, "Write CR10."),
    177     EXIT_REASON(SVM_EXIT_WRITE_CR11         ,   27, "Write CR11."),
    178     EXIT_REASON(SVM_EXIT_WRITE_CR12         ,   28, "Write CR12."),
    179     EXIT_REASON(SVM_EXIT_WRITE_CR13         ,   29, "Write CR13."),
    180     EXIT_REASON(SVM_EXIT_WRITE_CR14         ,   30, "Write CR14."),
    181     EXIT_REASON(SVM_EXIT_WRITE_CR15         ,   31, "Write CR15."),
    182     EXIT_REASON(SVM_EXIT_READ_DR0           ,   32, "Read DR0."),
    183     EXIT_REASON(SVM_EXIT_READ_DR1           ,   33, "Read DR1."),
    184     EXIT_REASON(SVM_EXIT_READ_DR2           ,   34, "Read DR2."),
    185     EXIT_REASON(SVM_EXIT_READ_DR3           ,   35, "Read DR3."),
    186     EXIT_REASON(SVM_EXIT_READ_DR4           ,   36, "Read DR4."),
    187     EXIT_REASON(SVM_EXIT_READ_DR5           ,   37, "Read DR5."),
    188     EXIT_REASON(SVM_EXIT_READ_DR6           ,   38, "Read DR6."),
    189     EXIT_REASON(SVM_EXIT_READ_DR7           ,   39, "Read DR7."),
    190     EXIT_REASON(SVM_EXIT_READ_DR8           ,   40, "Read DR8."),
    191     EXIT_REASON(SVM_EXIT_READ_DR9           ,   41, "Read DR9."),
    192     EXIT_REASON(SVM_EXIT_READ_DR10          ,   42, "Read DR10."),
    193     EXIT_REASON(SVM_EXIT_READ_DR11          ,   43, "Read DR11"),
    194     EXIT_REASON(SVM_EXIT_READ_DR12          ,   44, "Read DR12."),
    195     EXIT_REASON(SVM_EXIT_READ_DR13          ,   45, "Read DR13."),
    196     EXIT_REASON(SVM_EXIT_READ_DR14          ,   46, "Read DR14."),
    197     EXIT_REASON(SVM_EXIT_READ_DR15          ,   47, "Read DR15."),
    198     EXIT_REASON(SVM_EXIT_WRITE_DR0          ,   48, "Write DR0."),
    199     EXIT_REASON(SVM_EXIT_WRITE_DR1          ,   49, "Write DR1."),
    200     EXIT_REASON(SVM_EXIT_WRITE_DR2          ,   50, "Write DR2."),
    201     EXIT_REASON(SVM_EXIT_WRITE_DR3          ,   51, "Write DR3."),
    202     EXIT_REASON(SVM_EXIT_WRITE_DR4          ,   52, "Write DR4."),
    203     EXIT_REASON(SVM_EXIT_WRITE_DR5          ,   53, "Write DR5."),
    204     EXIT_REASON(SVM_EXIT_WRITE_DR6          ,   54, "Write DR6."),
    205     EXIT_REASON(SVM_EXIT_WRITE_DR7          ,   55, "Write DR7."),
    206     EXIT_REASON(SVM_EXIT_WRITE_DR8          ,   56, "Write DR8."),
    207     EXIT_REASON(SVM_EXIT_WRITE_DR9          ,   57, "Write DR9."),
    208     EXIT_REASON(SVM_EXIT_WRITE_DR10         ,   58, "Write DR10."),
    209     EXIT_REASON(SVM_EXIT_WRITE_DR11         ,   59, "Write DR11."),
    210     EXIT_REASON(SVM_EXIT_WRITE_DR12         ,   60, "Write DR12."),
    211     EXIT_REASON(SVM_EXIT_WRITE_DR13         ,   61, "Write DR13."),
    212     EXIT_REASON(SVM_EXIT_WRITE_DR14         ,   62, "Write DR14."),
    213     EXIT_REASON(SVM_EXIT_WRITE_DR15         ,   63, "Write DR15."),
    214     EXIT_REASON(SVM_EXIT_EXCEPTION_0        ,   64, "Exception Vector 0  (#DE)."),
    215     EXIT_REASON(SVM_EXIT_EXCEPTION_1        ,   65, "Exception Vector 1  (#DB)."),
    216     EXIT_REASON(SVM_EXIT_EXCEPTION_2        ,   66, "Exception Vector 2  (#NMI)."),
    217     EXIT_REASON(SVM_EXIT_EXCEPTION_3        ,   67, "Exception Vector 3  (#BP)."),
    218     EXIT_REASON(SVM_EXIT_EXCEPTION_4        ,   68, "Exception Vector 4  (#OF)."),
    219     EXIT_REASON(SVM_EXIT_EXCEPTION_5        ,   69, "Exception Vector 5  (#BR)."),
    220     EXIT_REASON(SVM_EXIT_EXCEPTION_6        ,   70, "Exception Vector 6  (#UD)."),
    221     EXIT_REASON(SVM_EXIT_EXCEPTION_7        ,   71, "Exception Vector 7  (#NM)."),
    222     EXIT_REASON(SVM_EXIT_EXCEPTION_8        ,   72, "Exception Vector 8  (#DF)."),
    223     EXIT_REASON(SVM_EXIT_EXCEPTION_9        ,   73, "Exception Vector 9  (#CO_SEG_OVERRUN)."),
    224     EXIT_REASON(SVM_EXIT_EXCEPTION_A        ,   74, "Exception Vector 10 (#TS)."),
    225     EXIT_REASON(SVM_EXIT_EXCEPTION_B        ,   75, "Exception Vector 11 (#NP)."),
    226     EXIT_REASON(SVM_EXIT_EXCEPTION_C        ,   76, "Exception Vector 12 (#SS)."),
    227     EXIT_REASON(SVM_EXIT_EXCEPTION_D        ,   77, "Exception Vector 13 (#GP)."),
    228     EXIT_REASON(SVM_EXIT_EXCEPTION_E        ,   78, "Exception Vector 14 (#PF)."),
    229     EXIT_REASON(SVM_EXIT_EXCEPTION_F        ,   79, "Exception Vector 15 (0x0f)."),
    230     EXIT_REASON(SVM_EXIT_EXCEPTION_10       ,   80, "Exception Vector 16 (#MF)."),
    231     EXIT_REASON(SVM_EXIT_EXCEPTION_11       ,   81, "Exception Vector 17 (#AC)."),
    232     EXIT_REASON(SVM_EXIT_EXCEPTION_12       ,   82, "Exception Vector 18 (#MC)."),
    233     EXIT_REASON(SVM_EXIT_EXCEPTION_13       ,   83, "Exception Vector 19 (#XF)."),
    234     EXIT_REASON(SVM_EXIT_EXCEPTION_14       ,   84, "Exception Vector 20 (0x14)."),
    235     EXIT_REASON(SVM_EXIT_EXCEPTION_15       ,   85, "Exception Vector 22 (0x15)."),
    236     EXIT_REASON(SVM_EXIT_EXCEPTION_16       ,   86, "Exception Vector 22 (0x16)."),
    237     EXIT_REASON(SVM_EXIT_EXCEPTION_17       ,   87, "Exception Vector 23 (0x17)."),
    238     EXIT_REASON(SVM_EXIT_EXCEPTION_18       ,   88, "Exception Vector 24 (0x18)."),
    239     EXIT_REASON(SVM_EXIT_EXCEPTION_19       ,   89, "Exception Vector 25 (0x19)."),
    240     EXIT_REASON(SVM_EXIT_EXCEPTION_1A       ,   90, "Exception Vector 26 (0x1A)."),
    241     EXIT_REASON(SVM_EXIT_EXCEPTION_1B       ,   91, "Exception Vector 27 (0x1B)."),
    242     EXIT_REASON(SVM_EXIT_EXCEPTION_1C       ,   92, "Exception Vector 28 (0x1C)."),
    243     EXIT_REASON(SVM_EXIT_EXCEPTION_1D       ,   93, "Exception Vector 29 (0x1D)."),
    244     EXIT_REASON(SVM_EXIT_EXCEPTION_1E       ,   94, "Exception Vector 30 (0x1E)."),
    245     EXIT_REASON(SVM_EXIT_EXCEPTION_1F       ,   95, "Exception Vector 31 (0x1F)."),
    246     EXIT_REASON(SVM_EXIT_INTR               ,   96, "Physical maskable interrupt (host)."),
    247     EXIT_REASON(SVM_EXIT_NMI                ,   97, "Physical non-maskable interrupt (host)."),
    248     EXIT_REASON(SVM_EXIT_SMI                ,   98, "System management interrupt (host)."),
    249     EXIT_REASON(SVM_EXIT_INIT               ,   99, "Physical INIT signal (host)."),
    250     EXIT_REASON(SVM_EXIT_VINTR              ,  100, "Virtual interrupt-window exit."),
    251     EXIT_REASON(SVM_EXIT_CR0_SEL_WRITE      ,  101, "Write to CR0 that changed any bits other than CR0.TS or CR0.MP."),
    252     EXIT_REASON(SVM_EXIT_IDTR_READ          ,  102, "Read IDTR"),
    253     EXIT_REASON(SVM_EXIT_GDTR_READ          ,  103, "Read GDTR"),
    254     EXIT_REASON(SVM_EXIT_LDTR_READ          ,  104, "Read LDTR."),
    255     EXIT_REASON(SVM_EXIT_TR_READ            ,  105, "Read TR."),
    256     EXIT_REASON(SVM_EXIT_IDTR_WRITE         ,  106, "Write IDTR."),
    257     EXIT_REASON(SVM_EXIT_GDTR_WRITE         ,  107, "Write GDTR."),
    258     EXIT_REASON(SVM_EXIT_LDTR_WRITE         ,  108, "Write LDTR."),
    259     EXIT_REASON(SVM_EXIT_TR_WRITE           ,  109, "Write TR."),
    260     EXIT_REASON(SVM_EXIT_RDTSC              ,  110, "RDTSC instruction."),
    261     EXIT_REASON(SVM_EXIT_RDPMC              ,  111, "RDPMC instruction."),
    262     EXIT_REASON(SVM_EXIT_PUSHF              ,  112, "PUSHF instruction."),
    263     EXIT_REASON(SVM_EXIT_POPF               ,  113, "POPF instruction."),
    264     EXIT_REASON(SVM_EXIT_CPUID              ,  114, "CPUID instruction."),
    265     EXIT_REASON(SVM_EXIT_RSM                ,  115, "RSM instruction."),
    266     EXIT_REASON(SVM_EXIT_IRET               ,  116, "IRET instruction."),
    267     EXIT_REASON(SVM_EXIT_SWINT              ,  117, "Software interrupt (INTn instructions)."),
    268     EXIT_REASON(SVM_EXIT_INVD               ,  118, "INVD instruction."),
    269     EXIT_REASON(SVM_EXIT_PAUSE              ,  119, "PAUSE instruction."),
    270     EXIT_REASON(SVM_EXIT_HLT                ,  120, "HLT instruction."),
    271     EXIT_REASON(SVM_EXIT_INVLPG             ,  121, "INVLPG instruction."),
    272     EXIT_REASON(SVM_EXIT_INVLPGA            ,  122, "INVLPGA instruction."),
    273     EXIT_REASON(SVM_EXIT_IOIO               ,  123, "IN/OUT accessing protected port."),
    274     EXIT_REASON(SVM_EXIT_MSR                ,  124, "RDMSR or WRMSR access to protected MSR."),
    275     EXIT_REASON(SVM_EXIT_TASK_SWITCH        ,  125, "Task switch."),
    276     EXIT_REASON(SVM_EXIT_FERR_FREEZE        ,  126, "Legacy FPU handling enabled; CPU frozen in an x87/mmx instr. waiting for interrupt"),
    277     EXIT_REASON(SVM_EXIT_SHUTDOWN           ,  127, "Shutdown."),
    278     EXIT_REASON(SVM_EXIT_VMRUN              ,  128, "VMRUN instruction."),
    279     EXIT_REASON(SVM_EXIT_VMMCALL            ,  129, "VMCALL instruction."),
    280     EXIT_REASON(SVM_EXIT_VMLOAD             ,  130, "VMLOAD instruction."),
    281     EXIT_REASON(SVM_EXIT_VMSAVE             ,  131, "VMSAVE instruction."),
    282     EXIT_REASON(SVM_EXIT_STGI               ,  132, "STGI instruction."),
    283     EXIT_REASON(SVM_EXIT_CLGI               ,  133, "CLGI instruction."),
    284     EXIT_REASON(SVM_EXIT_SKINIT             ,  134, "SKINIT instruction."),
    285     EXIT_REASON(SVM_EXIT_RDTSCP             ,  135, "RDTSCP instruction."),
    286     EXIT_REASON(SVM_EXIT_ICEBP              ,  136, "ICEBP instruction."),
    287     EXIT_REASON(SVM_EXIT_WBINVD             ,  137, "WBINVD instruction."),
    288     EXIT_REASON(SVM_EXIT_MONITOR            ,  138, "MONITOR instruction."),
    289     EXIT_REASON(SVM_EXIT_MWAIT              ,  139, "MWAIT instruction."),
    290     EXIT_REASON(SVM_EXIT_MWAIT_ARMED        ,  140, "MWAIT instruction when armed."),
    291     EXIT_REASON(SVM_EXIT_XSETBV             ,  141, "XSETBV instruction."),
     151    EXIT_REASON(SVM_EXIT_READ_CR0     ,    0, "Read CR0."),
     152    EXIT_REASON(SVM_EXIT_READ_CR1     ,    1, "Read CR1."),
     153    EXIT_REASON(SVM_EXIT_READ_CR2     ,    2, "Read CR2."),
     154    EXIT_REASON(SVM_EXIT_READ_CR3     ,    3, "Read CR3."),
     155    EXIT_REASON(SVM_EXIT_READ_CR4     ,    4, "Read CR4."),
     156    EXIT_REASON(SVM_EXIT_READ_CR5     ,    5, "Read CR5."),
     157    EXIT_REASON(SVM_EXIT_READ_CR6     ,    6, "Read CR6."),
     158    EXIT_REASON(SVM_EXIT_READ_CR7     ,    7, "Read CR7."),
     159    EXIT_REASON(SVM_EXIT_READ_CR8     ,    8, "Read CR8."),
     160    EXIT_REASON(SVM_EXIT_READ_CR9     ,    9, "Read CR9."),
     161    EXIT_REASON(SVM_EXIT_READ_CR10    ,   10, "Read CR10."),
     162    EXIT_REASON(SVM_EXIT_READ_CR11    ,   11, "Read CR11."),
     163    EXIT_REASON(SVM_EXIT_READ_CR12    ,   12, "Read CR12."),
     164    EXIT_REASON(SVM_EXIT_READ_CR13    ,   13, "Read CR13."),
     165    EXIT_REASON(SVM_EXIT_READ_CR14    ,   14, "Read CR14."),
     166    EXIT_REASON(SVM_EXIT_READ_CR15    ,   15, "Read CR15."),
     167    EXIT_REASON(SVM_EXIT_WRITE_CR0    ,   16, "Write CR0."),
     168    EXIT_REASON(SVM_EXIT_WRITE_CR1    ,   17, "Write CR1."),
     169    EXIT_REASON(SVM_EXIT_WRITE_CR2    ,   18, "Write CR2."),
     170    EXIT_REASON(SVM_EXIT_WRITE_CR3    ,   19, "Write CR3."),
     171    EXIT_REASON(SVM_EXIT_WRITE_CR4    ,   20, "Write CR4."),
     172    EXIT_REASON(SVM_EXIT_WRITE_CR5    ,   21, "Write CR5."),
     173    EXIT_REASON(SVM_EXIT_WRITE_CR6    ,   22, "Write CR6."),
     174    EXIT_REASON(SVM_EXIT_WRITE_CR7    ,   23, "Write CR7."),
     175    EXIT_REASON(SVM_EXIT_WRITE_CR8    ,   24, "Write CR8."),
     176    EXIT_REASON(SVM_EXIT_WRITE_CR9    ,   25, "Write CR9."),
     177    EXIT_REASON(SVM_EXIT_WRITE_CR10   ,   26, "Write CR10."),
     178    EXIT_REASON(SVM_EXIT_WRITE_CR11   ,   27, "Write CR11."),
     179    EXIT_REASON(SVM_EXIT_WRITE_CR12   ,   28, "Write CR12."),
     180    EXIT_REASON(SVM_EXIT_WRITE_CR13   ,   29, "Write CR13."),
     181    EXIT_REASON(SVM_EXIT_WRITE_CR14   ,   30, "Write CR14."),
     182    EXIT_REASON(SVM_EXIT_WRITE_CR15   ,   31, "Write CR15."),
     183    EXIT_REASON(SVM_EXIT_READ_DR0     ,   32, "Read DR0."),
     184    EXIT_REASON(SVM_EXIT_READ_DR1     ,   33, "Read DR1."),
     185    EXIT_REASON(SVM_EXIT_READ_DR2     ,   34, "Read DR2."),
     186    EXIT_REASON(SVM_EXIT_READ_DR3     ,   35, "Read DR3."),
     187    EXIT_REASON(SVM_EXIT_READ_DR4     ,   36, "Read DR4."),
     188    EXIT_REASON(SVM_EXIT_READ_DR5     ,   37, "Read DR5."),
     189    EXIT_REASON(SVM_EXIT_READ_DR6     ,   38, "Read DR6."),
     190    EXIT_REASON(SVM_EXIT_READ_DR7     ,   39, "Read DR7."),
     191    EXIT_REASON(SVM_EXIT_READ_DR8     ,   40, "Read DR8."),
     192    EXIT_REASON(SVM_EXIT_READ_DR9     ,   41, "Read DR9."),
     193    EXIT_REASON(SVM_EXIT_READ_DR10    ,   42, "Read DR10."),
     194    EXIT_REASON(SVM_EXIT_READ_DR11    ,   43, "Read DR11"),
     195    EXIT_REASON(SVM_EXIT_READ_DR12    ,   44, "Read DR12."),
     196    EXIT_REASON(SVM_EXIT_READ_DR13    ,   45, "Read DR13."),
     197    EXIT_REASON(SVM_EXIT_READ_DR14    ,   46, "Read DR14."),
     198    EXIT_REASON(SVM_EXIT_READ_DR15    ,   47, "Read DR15."),
     199    EXIT_REASON(SVM_EXIT_WRITE_DR0    ,   48, "Write DR0."),
     200    EXIT_REASON(SVM_EXIT_WRITE_DR1    ,   49, "Write DR1."),
     201    EXIT_REASON(SVM_EXIT_WRITE_DR2    ,   50, "Write DR2."),
     202    EXIT_REASON(SVM_EXIT_WRITE_DR3    ,   51, "Write DR3."),
     203    EXIT_REASON(SVM_EXIT_WRITE_DR4    ,   52, "Write DR4."),
     204    EXIT_REASON(SVM_EXIT_WRITE_DR5    ,   53, "Write DR5."),
     205    EXIT_REASON(SVM_EXIT_WRITE_DR6    ,   54, "Write DR6."),
     206    EXIT_REASON(SVM_EXIT_WRITE_DR7    ,   55, "Write DR7."),
     207    EXIT_REASON(SVM_EXIT_WRITE_DR8    ,   56, "Write DR8."),
     208    EXIT_REASON(SVM_EXIT_WRITE_DR9    ,   57, "Write DR9."),
     209    EXIT_REASON(SVM_EXIT_WRITE_DR10   ,   58, "Write DR10."),
     210    EXIT_REASON(SVM_EXIT_WRITE_DR11   ,   59, "Write DR11."),
     211    EXIT_REASON(SVM_EXIT_WRITE_DR12   ,   60, "Write DR12."),
     212    EXIT_REASON(SVM_EXIT_WRITE_DR13   ,   61, "Write DR13."),
     213    EXIT_REASON(SVM_EXIT_WRITE_DR14   ,   62, "Write DR14."),
     214    EXIT_REASON(SVM_EXIT_WRITE_DR15   ,   63, "Write DR15."),
     215    EXIT_REASON(SVM_EXIT_EXCEPTION_0  ,   64, "Exception Vector 0  (#DE)."),
     216    EXIT_REASON(SVM_EXIT_EXCEPTION_1  ,   65, "Exception Vector 1  (#DB)."),
     217    EXIT_REASON(SVM_EXIT_EXCEPTION_2  ,   66, "Exception Vector 2  (#NMI)."),
     218    EXIT_REASON(SVM_EXIT_EXCEPTION_3  ,   67, "Exception Vector 3  (#BP)."),
     219    EXIT_REASON(SVM_EXIT_EXCEPTION_4  ,   68, "Exception Vector 4  (#OF)."),
     220    EXIT_REASON(SVM_EXIT_EXCEPTION_5  ,   69, "Exception Vector 5  (#BR)."),
     221    EXIT_REASON(SVM_EXIT_EXCEPTION_6  ,   70, "Exception Vector 6  (#UD)."),
     222    EXIT_REASON(SVM_EXIT_EXCEPTION_7  ,   71, "Exception Vector 7  (#NM)."),
     223    EXIT_REASON(SVM_EXIT_EXCEPTION_8  ,   72, "Exception Vector 8  (#DF)."),
     224    EXIT_REASON(SVM_EXIT_EXCEPTION_9  ,   73, "Exception Vector 9  (#CO_SEG_OVERRUN)."),
     225    EXIT_REASON(SVM_EXIT_EXCEPTION_A  ,   74, "Exception Vector 10 (#TS)."),
     226    EXIT_REASON(SVM_EXIT_EXCEPTION_B  ,   75, "Exception Vector 11 (#NP)."),
     227    EXIT_REASON(SVM_EXIT_EXCEPTION_C  ,   76, "Exception Vector 12 (#SS)."),
     228    EXIT_REASON(SVM_EXIT_EXCEPTION_D  ,   77, "Exception Vector 13 (#GP)."),
     229    EXIT_REASON(SVM_EXIT_EXCEPTION_E  ,   78, "Exception Vector 14 (#PF)."),
     230    EXIT_REASON(SVM_EXIT_EXCEPTION_F  ,   79, "Exception Vector 15 (0x0f)."),
     231    EXIT_REASON(SVM_EXIT_EXCEPTION_10 ,   80, "Exception Vector 16 (#MF)."),
     232    EXIT_REASON(SVM_EXIT_EXCEPTION_11 ,   81, "Exception Vector 17 (#AC)."),
     233    EXIT_REASON(SVM_EXIT_EXCEPTION_12 ,   82, "Exception Vector 18 (#MC)."),
     234    EXIT_REASON(SVM_EXIT_EXCEPTION_13 ,   83, "Exception Vector 19 (#XF)."),
     235    EXIT_REASON(SVM_EXIT_EXCEPTION_14 ,   84, "Exception Vector 20 (0x14)."),
     236    EXIT_REASON(SVM_EXIT_EXCEPTION_15 ,   85, "Exception Vector 22 (0x15)."),
     237    EXIT_REASON(SVM_EXIT_EXCEPTION_16 ,   86, "Exception Vector 22 (0x16)."),
     238    EXIT_REASON(SVM_EXIT_EXCEPTION_17 ,   87, "Exception Vector 23 (0x17)."),
     239    EXIT_REASON(SVM_EXIT_EXCEPTION_18 ,   88, "Exception Vector 24 (0x18)."),
     240    EXIT_REASON(SVM_EXIT_EXCEPTION_19 ,   89, "Exception Vector 25 (0x19)."),
     241    EXIT_REASON(SVM_EXIT_EXCEPTION_1A ,   90, "Exception Vector 26 (0x1A)."),
     242    EXIT_REASON(SVM_EXIT_EXCEPTION_1B ,   91, "Exception Vector 27 (0x1B)."),
     243    EXIT_REASON(SVM_EXIT_EXCEPTION_1C ,   92, "Exception Vector 28 (0x1C)."),
     244    EXIT_REASON(SVM_EXIT_EXCEPTION_1D ,   93, "Exception Vector 29 (0x1D)."),
     245    EXIT_REASON(SVM_EXIT_EXCEPTION_1E ,   94, "Exception Vector 30 (0x1E)."),
     246    EXIT_REASON(SVM_EXIT_EXCEPTION_1F ,   95, "Exception Vector 31 (0x1F)."),
     247    EXIT_REASON(SVM_EXIT_INTR         ,   96, "Physical maskable interrupt (host)."),
     248    EXIT_REASON(SVM_EXIT_NMI          ,   97, "Physical non-maskable interrupt (host)."),
     249    EXIT_REASON(SVM_EXIT_SMI          ,   98, "System management interrupt (host)."),
     250    EXIT_REASON(SVM_EXIT_INIT         ,   99, "Physical INIT signal (host)."),
     251    EXIT_REASON(SVM_EXIT_VINTR        ,  100, "Virtual interrupt-window exit."),
     252    EXIT_REASON(SVM_EXIT_CR0_SEL_WRITE,  101, "Write to CR0 that changed any bits other than CR0.TS or CR0.MP."),
     253    EXIT_REASON(SVM_EXIT_IDTR_READ    ,  102, "Read IDTR"),
     254    EXIT_REASON(SVM_EXIT_GDTR_READ    ,  103, "Read GDTR"),
     255    EXIT_REASON(SVM_EXIT_LDTR_READ    ,  104, "Read LDTR."),
     256    EXIT_REASON(SVM_EXIT_TR_READ      ,  105, "Read TR."),
     257    EXIT_REASON(SVM_EXIT_IDTR_WRITE   ,  106, "Write IDTR."),
     258    EXIT_REASON(SVM_EXIT_GDTR_WRITE   ,  107, "Write GDTR."),
     259    EXIT_REASON(SVM_EXIT_LDTR_WRITE   ,  108, "Write LDTR."),
     260    EXIT_REASON(SVM_EXIT_TR_WRITE     ,  109, "Write TR."),
     261    EXIT_REASON(SVM_EXIT_RDTSC        ,  110, "RDTSC instruction."),
     262    EXIT_REASON(SVM_EXIT_RDPMC        ,  111, "RDPMC instruction."),
     263    EXIT_REASON(SVM_EXIT_PUSHF        ,  112, "PUSHF instruction."),
     264    EXIT_REASON(SVM_EXIT_POPF         ,  113, "POPF instruction."),
     265    EXIT_REASON(SVM_EXIT_CPUID        ,  114, "CPUID instruction."),
     266    EXIT_REASON(SVM_EXIT_RSM          ,  115, "RSM instruction."),
     267    EXIT_REASON(SVM_EXIT_IRET         ,  116, "IRET instruction."),
     268    EXIT_REASON(SVM_EXIT_SWINT        ,  117, "Software interrupt (INTn instructions)."),
     269    EXIT_REASON(SVM_EXIT_INVD         ,  118, "INVD instruction."),
     270    EXIT_REASON(SVM_EXIT_PAUSE        ,  119, "PAUSE instruction."),
     271    EXIT_REASON(SVM_EXIT_HLT          ,  120, "HLT instruction."),
     272    EXIT_REASON(SVM_EXIT_INVLPG       ,  121, "INVLPG instruction."),
     273    EXIT_REASON(SVM_EXIT_INVLPGA      ,  122, "INVLPGA instruction."),
     274    EXIT_REASON(SVM_EXIT_IOIO         ,  123, "IN/OUT accessing protected port."),
     275    EXIT_REASON(SVM_EXIT_MSR          ,  124, "RDMSR or WRMSR access to protected MSR."),
     276    EXIT_REASON(SVM_EXIT_TASK_SWITCH  ,  125, "Task switch."),
     277    EXIT_REASON(SVM_EXIT_FERR_FREEZE  ,  126, "Legacy FPU handling enabled; CPU frozen in an x87/mmx instr. waiting for interrupt"),
     278    EXIT_REASON(SVM_EXIT_SHUTDOWN     ,  127, "Shutdown."),
     279    EXIT_REASON(SVM_EXIT_VMRUN        ,  128, "VMRUN instruction."),
     280    EXIT_REASON(SVM_EXIT_VMMCALL      ,  129, "VMCALL instruction."),
     281    EXIT_REASON(SVM_EXIT_VMLOAD       ,  130, "VMLOAD instruction."),
     282    EXIT_REASON(SVM_EXIT_VMSAVE       ,  131, "VMSAVE instruction."),
     283    EXIT_REASON(SVM_EXIT_STGI         ,  132, "STGI instruction."),
     284    EXIT_REASON(SVM_EXIT_CLGI         ,  133, "CLGI instruction."),
     285    EXIT_REASON(SVM_EXIT_SKINIT       ,  134, "SKINIT instruction."),
     286    EXIT_REASON(SVM_EXIT_RDTSCP       ,  135, "RDTSCP instruction."),
     287    EXIT_REASON(SVM_EXIT_ICEBP        ,  136, "ICEBP instruction."),
     288    EXIT_REASON(SVM_EXIT_WBINVD       ,  137, "WBINVD instruction."),
     289    EXIT_REASON(SVM_EXIT_MONITOR      ,  138, "MONITOR instruction."),
     290    EXIT_REASON(SVM_EXIT_MWAIT        ,  139, "MWAIT instruction."),
     291    EXIT_REASON(SVM_EXIT_MWAIT_ARMED  ,  140, "MWAIT instruction when armed."),
     292    EXIT_REASON(SVM_EXIT_XSETBV       ,  141, "XSETBV instruction."),
    292293};
    293294/** Array index of the last valid AMD-V exit reason. */
    294 #define MAX_EXITREASON_AMDV                    141
    295 #define SVM_EXIT_REASON_NPF                    EXIT_REASON(SVM_EXIT_NPF, 1024, "Nested Page Fault.")
    296 
    297 # undef EXIT_REASON_NIL
    298 
     295#define MAX_EXITREASON_AMDV              141
     296
     297/** Special exit reasons not covered in the array above. */
     298#define SVM_EXIT_REASON_NPF                  EXIT_REASON(SVM_EXIT_NPF                , 1024, "Nested Page Fault.")
     299#define SVM_EXIT_REASON_AVIC_INCOMPLETE_IPI  EXIT_REASON(SVM_EXIT_AVIC_INCOMPLETE_IPI, 1025, "AVIC - Incomplete IPI delivery.")
     300#define SVM_EXIT_REASON_AVIC_NOACCEL         EXIT_REASON(SVM_EXIT_AVIC_NOACCEL       , 1026, "AVIC - Unhandled register.")
     301
     302/**
     303 * Gets the SVM exit reason if it's one of the reasons not present in the @c
     304 * g_apszAmdVExitReasons array.
     305 *
     306 * @returns The exit reason or NULL if unknown.
     307 * @param   uExit       The exit.
     308 */
     309DECLINLINE(const char *) hmSvmGetSpecialExitReasonDesc(uint16_t uExit)
     310{
     311    switch (uExit)
     312    {
     313        case SVM_EXIT_NPF:                 return SVM_EXIT_REASON_NPF;
     314        case SVM_EXIT_AVIC_INCOMPLETE_IPI: return SVM_EXIT_REASON_AVIC_INCOMPLETE_IPI;
     315        case SVM_EXIT_AVIC_NOACCEL:        return SVM_EXIT_REASON_AVIC_NOACCEL;
     316    }
     317    return EXIT_REASON_NIL();
     318}
     319#undef EXIT_REASON_NIL
     320#undef EXIT_REASON
     321
     322/** @def HMVMX_REPORT_FEATURE
     323 * Reports VT-x feature to the release log.
     324 *
     325 * @param   allowed1        Mask of allowed feature bits.
     326 * @param   disallowed0     Mask of disallowed feature bits.
     327 * @param   featflag        Mask of the feature to report.
     328 */
    299329#define HMVMX_REPORT_FEATURE(allowed1, disallowed0, featflag) \
    300330    do { \
     
    310340    } while (0)
    311341
     342/** @def HMVMX_REPORT_ALLOWED_FEATURE
     343 * Reports an allowed VT-x feature to the release log.
     344 *
     345 * @param   allowed1        Mask of allowed feature bits.
     346 * @param   featflag        Mask of the feature to report.
     347 */
    312348#define HMVMX_REPORT_ALLOWED_FEATURE(allowed1, featflag) \
    313349    do { \
     
    318354    } while (0)
    319355
    320 #define HMVMX_REPORT_CAPABILITY(msrcaps, cap) \
     356/** @def HMVMX_REPORT_MSR_CAPABILITY
     357 * Reports MSR feature capability.
     358 *
     359 * @param   msrcap          Mask of MSR feature bits.
     360 * @param   featflag        Mask of the feature to report.
     361 */
     362#define HMVMX_REPORT_MSR_CAPABILITY(msrcaps, cap) \
    321363    do { \
    322364        if ((msrcaps) & (cap)) \
     
    12451287        val = pVM->hm.s.vmx.Msrs.u64EptVpidCaps;
    12461288        LogRel(("HM: MSR_IA32_VMX_EPT_VPID_CAP       = %#RX64\n", val));
    1247         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_RWX_X_ONLY);
    1248         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4);
    1249         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EMT_UC);
    1250         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EMT_WB);
    1251         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PDE_2M);
    1252         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PDPTE_1G);
    1253         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT);
    1254         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EPT_ACCESS_DIRTY);
    1255         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT);
    1256         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS);
    1257         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID);
    1258         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_INDIV_ADDR);
    1259         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT);
    1260         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS);
    1261         HMVMX_REPORT_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS);
     1289        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_RWX_X_ONLY);
     1290        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4);
     1291        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EMT_UC);
     1292        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EMT_WB);
     1293        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PDE_2M);
     1294        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_PDPTE_1G);
     1295        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT);
     1296        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_EPT_ACCESS_DIRTY);
     1297        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT);
     1298        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS);
     1299        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID);
     1300        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_INDIV_ADDR);
     1301        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT);
     1302        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS);
     1303        HMVMX_REPORT_MSR_CAPABILITY(val, MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS);
    12621304    }
    12631305
     
    34963538            if (uExit <= cMaxExitDesc)
    34973539                pszExit = papszDesc[uExit];
    3498             else if (!fIsVtx && uExit == SVM_EXIT_NPF)
    3499                 pszExit = SVM_EXIT_REASON_NPF;
     3540            else if (!fIsVtx)
     3541                pszExit = hmSvmGetSpecialExitReasonDesc(uExit);
     3542            else
     3543                pszExit = NULL;
    35003544
    35013545            pHlp->pfnPrintf(pHlp, "  auExitHistory[%2u] = 0x%04x  %s %s\n", i, uExit, pszExit,
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