VirtualBox

儲存庫 vbox 的更動 65934


忽略:
時間撮記:
2017-3-3 下午01:35:01 (8 年 以前)
作者:
vboxsync
訊息:

VMM: Nested Hw.virt: Invlpga IEM interface with HM.

位置:
trunk
檔案:
修改 3 筆資料

圖例:

未更動
新增
刪除
  • trunk/include/VBox/vmm/iem.h

    r65933 r65934  
    137137VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmload(PVMCPU pVCpu, uint8_t cbInstr);
    138138VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedVmsave(PVMCPU pVCpu, uint8_t cbInstr);
     139VMM_INT_DECL(VBOXSTRICTRC)  IEMExecDecodedInvlpga(PVMCPU pVCpu, uint8_t cbInstr);
    139140#endif
    140141/** @}  */
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r65933 r65934  
    1502315023    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1502415024}
     15025
     15026
     15027/**
     15028 * Interface for HM and EM to emulate the INVLPGA instruction.
     15029 *
     15030 * @returns Strict VBox status code.
     15031 * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
     15032 * @param   cbInstr     The instruction length in bytes.
     15033 * @thread  EMT(pVCpu)
     15034 */
     15035VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedInvlpga(PVMCPU pVCpu, uint8_t cbInstr)
     15036{
     15037    IEMEXEC_ASSERT_INSTR_LEN_RETURN(cbInstr, 3);
     15038
     15039    iemInitExec(pVCpu, false /*fBypassHandlers*/);
     15040    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_invlpga);
     15041    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
     15042}
    1502515043#endif /* VBOX_WITH_NESTED_HWVIRT */
    1502615044
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r65933 r65934  
    275275static FNSVMEXITHANDLER hmR0SvmExitVmload;
    276276static FNSVMEXITHANDLER hmR0SvmExitVmsave;
     277static FNSVMEXITHANDLER hmR0SvmExitInvlpga;
    277278#endif
    278279/** @} */
     
    36563657                case SVM_EXIT_VMLOAD:   return hmR0SvmExitVmload(pVCpu, pCtx, pSvmTransient);
    36573658                case SVM_EXIT_VMSAVE:   return hmR0SvmExitVmsave(pVCpu, pCtx, pSvmTransient);
     3659                case SVM_EXIT_INVLPGA:  return hmR0SvmExitInvlpga(pVCpu, pCtx, pSvmTransient);
    36583660#else
    36593661                case SVM_EXIT_CLGI:
     
    36613663                case SVM_EXIT_VMLOAD:
    36623664                case SVM_EXIT_VMSAVE:
     3665                case SVM_EXIT_INVLPGA:
    36633666#endif
    3664                 case SVM_EXIT_INVLPGA:
    36653667                case SVM_EXIT_RSM:
    36663668                case SVM_EXIT_VMRUN:
     
    56705672    /** @todo Stat. */
    56715673    /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitClgi); */
     5674    /** @todo Decode Assist. */
    56725675    VBOXSTRICTRC rcStrict = IEMExecDecodedClgi(pVCpu, 3);
    56735676    return VBOXSTRICTRC_VAL(rcStrict);
     
    56835686    /** @todo Stat. */
    56845687    /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitStgi); */
     5688    /** @todo Decode Assist. */
    56855689    VBOXSTRICTRC rcStrict = IEMExecDecodedStgi(pVCpu, 3);
    56865690    return VBOXSTRICTRC_VAL(rcStrict);
     
    56965700    /** @todo Stat. */
    56975701    /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitVmload); */
     5702    /** @todo Decode Assist. */
    56985703    VBOXSTRICTRC rcStrict = IEMExecDecodedVmload(pVCpu, 3);
    56995704    return VBOXSTRICTRC_VAL(rcStrict);
     
    57095714    /** @todo Stat. */
    57105715    /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitVmsave); */
     5716    /** @todo Decode Assist. */
    57115717    VBOXSTRICTRC rcStrict = IEMExecDecodedVmsave(pVCpu, 3);
    57125718    return VBOXSTRICTRC_VAL(rcStrict);
    57135719}
     5720
     5721
     5722/**
     5723 * \#VMEXIT handler for INVLPGA (SVM_EXIT_INVLPGA). Conditional \#VMEXIT.
     5724 */
     5725HMSVM_EXIT_DECL hmR0SvmExitInvlpga(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
     5726{
     5727    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
     5728    /** @todo Stat. */
     5729    /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitInvlpga); */
     5730    /** @todo Decode Assist. */
     5731    VBOXSTRICTRC rcStrict = IEMExecDecodedInvlpga(pVCpu, 3);
     5732    return VBOXSTRICTRC_VAL(rcStrict);
     5733}
    57145734#endif /* VBOX_WITH_NESTED_HWVIRT */
    57155735
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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