VirtualBox

儲存庫 vbox 的更動 56813


忽略:
時間撮記:
2015-7-6 上午11:03:52 (10 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
101464
訊息:

VMM/GIM: Fix regression introduced in r101441 (on hosts without threadctxhooks, we need to take spinlocks)

位置:
trunk/src/VBox/VMM
檔案:
修改 3 筆資料

圖例:

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

    r56793 r56813  
    226226        {
    227227            bool fEnable = RT_BOOL(uRawValue & MSR_GIM_KVM_SYSTEM_TIME_ENABLE_BIT);
    228 #ifndef IN_RING3
    229 # ifdef IN_RING0
     228#ifdef IN_RING0
    230229            gimR0KvmUpdateSystemTime(pVM, pVCpu);
    231 # else
     230            return VINF_CPUM_R3_MSR_WRITE;
     231#elif defined(IN_RC)
    232232            Assert(pVM->cCpus == 1);
    233233            if (fEnable)
     
    238238                ASMSetFlags(fEFlags);
    239239            }
    240 # endif
    241240            return VINF_CPUM_R3_MSR_WRITE;
    242 #else
     241#else /* IN_RING3 */
    243242            if (!fEnable)
    244243            {
     
    271270            }
    272271            return VINF_SUCCESS;
    273 #endif /* IN_RING3 */
     272#endif
    274273        }
    275274
     
    278277        {
    279278#ifndef IN_RING3
    280 
    281279            return VINF_CPUM_R3_MSR_WRITE;
    282280#else
  • trunk/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp

    r56791 r56813  
    2828#include <VBox/vmm/vm.h>
    2929
    30 #include <iprt/semaphore.h>
     30#include <iprt/spinlock.h>
    3131
    3232
     
    4646    Assert(GIMIsEnabled(pVM));
    4747    PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
    48     AssertReturn(pKvm->hFastMtx != NIL_RTSEMFASTMUTEX, VERR_GIM_IPE_3);
     48    AssertReturn(pKvm->hSpinlockR0 != NIL_RTSPINLOCK, VERR_GIM_IPE_3);
    4949
    5050    /*
     
    6262     * will be applied to the remaining.
    6363     */
    64     RTSemFastMutexRequest(pKvm->hFastMtx);
     64    RTSpinlockAcquire(pKvm->hSpinlockR0);
    6565    for (uint32_t i = 0; i < pVM->cCpus; i++)
    6666    {
    67         PGIMKVMCPU pKvmCpu   = &pVM->aCpus[i].gim.s.u.KvmCpu;
     67        PGIMKVMCPU pKvmCpu = &pVM->aCpus[i].gim.s.u.KvmCpu;
    6868        if (   !pKvmCpu->uTsc
    6969            && !pKvmCpu->uVirtNanoTS)
     
    7373        }
    7474    }
    75     RTSemFastMutexRelease(pKvm->hFastMtx);
     75    RTSpinlockRelease(pKvm->hSpinlockR0);
    7676
    7777    return VINF_SUCCESS;
     
    9191
    9292    PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
    93     Assert(pKvm->hFastMtx == NIL_RTSEMFASTMUTEX);
     93    Assert(pKvm->hSpinlockR0 == NIL_RTSPINLOCK);
    9494
    95     int rc = RTSemFastMutexCreate(&pKvm->hFastMtx);
     95    int rc = RTSpinlockCreate(&pKvm->hSpinlockR0, RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, "KVM");
    9696    return rc;
    9797}
     
    110110
    111111    PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
    112     RTSemFastMutexDestroy(pKvm->hFastMtx);
    113     pKvm->hFastMtx = NIL_RTSEMFASTMUTEX;
     112    RTSpinlockDestroy(pKvm->hSpinlockR0);
     113    pKvm->hSpinlockR0 = NIL_RTSPINLOCK;
    114114
    115115    return VINF_SUCCESS;
  • trunk/src/VBox/VMM/include/GIMKvmInternal.h

    r56791 r56813  
    188188
    189189/**
    190  * GIM KVMV VM instance data.
     190 * GIM KVM VM instance data.
    191191 * Changes to this must checked against the padding of the gim union in VM!
    192192 */
     
    203203    /** The TSC frequency (in HZ) reported to the guest. */
    204204    uint64_t                    cTscTicksPerSecond;
    205     /** Ring-0 mutex. */
    206     RTSEMFASTMUTEX              hFastMtx;
     205    /** Spinlock used for protecting GIMKVMCPU::uTsc and
     206     *  GIMKVMCPU::uVirtNanoTS. */
     207    RTSPINLOCK                  hSpinlockR0;
    207208} GIMKVM;
    208209/** Pointer to per-VM GIM KVM instance data. */
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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