儲存庫 vbox 的更動 49888
- 時間撮記:
- 2013-12-12 下午05:03:16 (11 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r49879 r49888 1998 1998 Assert(VMMR0IsLogFlushDisabled(pVCpu)); 1999 1999 2000 /* 2001 * IMPORTANT!!! 2002 * If you modify code here, make sure to check whether hmR0SvmCallRing3Callback() needs to be updated too. 2003 */ 2004 2000 2005 /* Restore host FPU state if necessary and resync on next R0 reentry .*/ 2001 2006 if (CPUMIsGuestFPUStateActive(pVCpu)) … … 2055 2060 } 2056 2061 2062 /* 2063 * IMPORTANT!!! 2064 * If you modify code here, make sure to check whether hmR0SvmCallRing3Callback() needs to be updated too. 2065 */ 2057 2066 /* Deregister hook now that we've left HM context before re-enabling preemption. */ 2058 2067 if (VMMR0ThreadCtxHooksAreRegistered(pVCpu)) … … 2092 2101 * @param pvUser The user argument (pointer to the possibly 2093 2102 * out-of-date guest-CPU context). 2094 *2095 * @remarks Must never be called with @a enmOperation ==2096 * VMMCALLRING3_VM_R0_ASSERTION. We can't assert it here because if it2097 * it -does- get called with VMMCALLRING3_VM_R0_ASSERTION, we'll end up2098 * with an infinite recursion.2099 2103 */ 2100 2104 DECLCALLBACK(int) hmR0SvmCallRing3Callback(PVMCPU pVCpu, VMMCALLRING3 enmOperation, void *pvUser) 2101 2105 { 2102 NOREF(enmOperation); 2103 2104 /* VMMRZCallRing3() already makes sure we never get called as a result of an longjmp due to an assertion, */ 2106 if (enmOperation == VMMCALLRING3_VM_R0_ASSERTION) 2107 { 2108 /* 2109 * !!! IMPORTANT !!! 2110 * If you modify code here, make sure to check whether hmR0SvmLeave() and hmR0SvmLeaveSession() needs 2111 * to be updated too. This is a stripped down version which gets out ASAP trying to not trigger any assertion. 2112 */ 2113 VMMRZCallRing3RemoveNotification(pVCpu); 2114 VMMRZCallRing3Disable(pVCpu); 2115 HM_DISABLE_PREEMPT_IF_NEEDED(); 2116 2117 /* Restore host FPU state if necessary and resync on next R0 reentry .*/ 2118 if (CPUMIsGuestFPUStateActive(pVCpu)) 2119 CPUMR0SaveGuestFPU(pVCpu->CTX_SUFF(pVM), pVCpu, (PCPUMCTX)pvUser); 2120 2121 /* Restore host debug registers if necessary and resync on next R0 reentry. */ 2122 CPUMR0DebugStateMaybeSaveGuestAndRestoreHost(pVCpu, false /* save DR6 */); 2123 2124 /* Deregister hook now that we've left HM context before re-enabling preemption. */ 2125 if (VMMR0ThreadCtxHooksAreRegistered(pVCpu)) 2126 VMMR0ThreadCtxHooksDeregister(pVCpu); 2127 2128 /* Leave HM context. This takes care of local init (term). */ 2129 int rc = HMR0LeaveCpu(pVCpu); 2130 2131 HM_RESTORE_PREEMPT_IF_NEEDED(); 2132 return VINF_SUCCESS; 2133 } 2134 2105 2135 Assert(pVCpu); 2106 2136 Assert(pvUser);
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器