VirtualBox

vbox的更動 69144 路徑 trunk/src/VBox


忽略:
時間撮記:
2017-10-20 上午10:44:18 (7 年 以前)
作者:
vboxsync
訊息:

VMM: Added CPUMSetGuestEferNoCheck so we can also call it when emulating SVM VMRUN instruction.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp

    r69111 r69144  
    14421442        return VERR_CPUM_RAISE_GP_0;
    14431443
    1444     pVCpu->cpum.s.Guest.msrEFER = uValidatedEfer;
    1445 
    1446     /* AMD64 Architecture Programmer's Manual: 15.15 TLB Control; flush the TLB
    1447        if MSR_K6_EFER_NXE, MSR_K6_EFER_LME or MSR_K6_EFER_LMA are changed. */
    1448     if (   (uOldEfer                    & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA))
    1449         != (pVCpu->cpum.s.Guest.msrEFER & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA)))
    1450     {
    1451         /// @todo PGMFlushTLB(pVCpu, cr3, true /*fGlobal*/);
    1452         HMFlushTLB(pVCpu);
    1453 
    1454         /* Notify PGM about NXE changes. */
    1455         if (   (uOldEfer                    & MSR_K6_EFER_NXE)
    1456             != (pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE))
    1457             PGMNotifyNxeChanged(pVCpu, !(uOldEfer & MSR_K6_EFER_NXE));
    1458     }
     1444    CPUMSetGuestEferNoCheck(pVCpu, uOldEfer, uValidatedEfer);
    14591445    return VINF_SUCCESS;
    14601446}
     
    61046090
    61056091/**
     6092 * Sets the guest EFER MSR without performing any additional checks.
     6093 *
     6094 * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
     6095 * @param   uOldEfer    The previous EFER MSR value.
     6096 * @param   uValidEfer  The new, validated EFER MSR value.
     6097 *
     6098 * @remarks One would normally call CPUMQueryValidatedGuestEfer before calling this
     6099 *          function to change the EFER in order to perform an EFER transition.
     6100 */
     6101VMMDECL(void) CPUMSetGuestEferNoCheck(PVMCPU pVCpu, uint64_t uOldEfer, uint64_t uValidEfer)
     6102{
     6103    pVCpu->cpum.s.Guest.msrEFER = uValidEfer;
     6104
     6105    /* AMD64 Architecture Programmer's Manual: 15.15 TLB Control; flush the TLB
     6106       if MSR_K6_EFER_NXE, MSR_K6_EFER_LME or MSR_K6_EFER_LMA are changed. */
     6107    if (   (uOldEfer                    & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA))
     6108        != (pVCpu->cpum.s.Guest.msrEFER & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA)))
     6109    {
     6110        /// @todo PGMFlushTLB(pVCpu, cr3, true /*fGlobal*/);
     6111        HMFlushTLB(pVCpu);
     6112
     6113        /* Notify PGM about NXE changes. */
     6114        if (   (uOldEfer                    & MSR_K6_EFER_NXE)
     6115            != (pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE))
     6116            PGMNotifyNxeChanged(pVCpu, !(uOldEfer & MSR_K6_EFER_NXE));
     6117    }
     6118}
     6119
     6120
     6121/**
    61066122 * Validates an EFER MSR write.
    61076123 *
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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