VirtualBox

Changeset 73983 in vbox for trunk/include/VBox/vmm


Ignore:
Timestamp:
Aug 31, 2018 8:17:31 AM (6 years ago)
Author:
vboxsync
Message:

VMM/IEM, HM: Nested VMX: bugref:9180 Implement VMREAD, added using decoded IEM APIs for
VMXON, VMREAD, VMWRITE in VMX R0 code.

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

Legend:

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

    r73955 r73983  
    972972        /** The address size; 0=16-bit, 1=32-bit, 2=64-bit, rest undefined. */
    973973        uint32_t    u3AddrSize      : 3;
    974         /** Memory/Register - Always cleared to 0 to indicate memory operand. */
     974        /** Memory or register operand. */
    975975        uint32_t    fIsRegOperand   : 1;
    976976        /** Operand size; 0=16-bit, 1=32-bit, 2=64-bit, 3=unused.  */
     
    23132313#define VMX_INSTR_ID_IS_VALID(a)                              (((a) >> 7) & 1)
    23142314#define VMX_INSTR_ID_GET_ID(a)                                ((a) & ~VMX_INSTR_ID_VALID)
    2315 #define VMX_INSTR_ID_NONE                                     0x7f
    2316 /** The following values are in accordance to the VT-x spec: */
     2315/** The OR'd rvalues are from the VT-x spec (valid bit is VBox specific): */
    23172316#define VMX_INSTR_ID_SGDT                                     ((VMX_INSTR_ID_VALID) | 0)
    23182317#define VMX_INSTR_ID_SIDT                                     ((VMX_INSTR_ID_VALID) | 1)
     
    28812880    kVmxVInstrDiag_Vmwrite_Success,
    28822881    /* Last member for determining array index limit. */
     2882    /* VMREAD. */
     2883    kVmxVInstrDiag_Vmread_Cpl,
     2884    kVmxVInstrDiag_Vmread_FieldInvalid,
     2885    kVmxVInstrDiag_Vmread_LinkPtrInvalid,
     2886    kVmxVInstrDiag_Vmread_PtrInvalid,
     2887    kVmxVInstrDiag_Vmread_PtrMap,
     2888    kVmxVInstrDiag_Vmread_Success,
    28832889    kVmxVInstrDiag_Last
    28842890} VMXVINSTRDIAG;
     
    29012907typedef struct
    29022908{
     2909    /** The VM-exit reason. */
     2910    uint32_t                uReason;
     2911    /** The VM-exit instruction length. */
     2912    uint32_t                cbInstr;
     2913    /** The VM-exit instruction information. */
     2914    VMXEXITINSTRINFO        InstrInfo;
     2915    /** Padding. */
     2916    uint32_t                u32Padding0;
     2917
    29032918    /** The VM-exit qualification field. */
    2904     uint64_t                u64ExitQual;
     2919    uint64_t                u64Qual;
    29052920    /** The guest-linear address field. */
    29062921    uint64_t                u64GuestLinearAddr;
    2907     /** The VM-exit instruction information. */
    2908     VMXEXITINSTRINFO        ExitInstrInfo;
    2909     /** Padding. */
    2910     uint32_t                u32Padding0;
     2922    /** The effective guest-linear address if @a InstrInfo indicates a memory-based
     2923     *  instruction VM-exit. */
     2924    RTGCPTR                 GCPtrEffAddr;
     2925
     2926    /** The VM-exit instruction ID. */
     2927    VMXINSTRID              uInstrId;
    29112928} VMXVEXITINFO;
    29122929/** Pointer to the VMXVEXITINFO struct. */
  • trunk/include/VBox/vmm/iem.h

    r73961 r73983  
    323323
    324324#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
    325 VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmwrite(PVMCPU pVCpu, uint8_t cbInstr, uint64_t u64Val, uint32_t uFieldEnc,
    326                                                   PCVMXVEXITINFO pExitInfo);
    327 VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmptrld(PVMCPU pVCpu, uint8_t cbInstr, uint8_t iEffSeg, RTGCPHYS GCPtrVmcs,
    328                                                   PCVMXVEXITINFO pExitInfo);
    329 VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmptrst(PVMCPU pVCpu, uint8_t cbInstr, uint8_t iEffSeg, RTGCPHYS GCPtrVmcs,
    330                                                   PCVMXVEXITINFO pExitInfo);
    331 VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmclear(PVMCPU pVCpu, uint8_t cbInstr, uint8_t iEffSeg, RTGCPHYS GCPtrVmcs,
    332                                                   PCVMXVEXITINFO pExitInfo);
    333 VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmxon(PVMCPU pVCpu, uint8_t cbInstr, uint8_t iEffSeg, RTGCPHYS GCPtrVmxon,
    334                                                 PCVMXVEXITINFO pExitInfo);
     325VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmwrite(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo);
     326VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmptrld(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo);
     327VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmptrst(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo);
     328VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmclear(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo);
     329VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmxon(PVMCPU pVCpu, PCVMXVEXITINFO pExitInfo);
    335330VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmxoff(PVMCPU pVCpu, uint8_t cbInstr);
    336331#endif
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