- Timestamp:
- Dec 15, 2015 4:35:35 PM (9 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r59111 r59137 8315 8315 * Worker for loading the guest-state bits in the inner VT-x execution loop. 8316 8316 * 8317 * @returns Strict VBox status code (i.e. informational status codes too). 8317 8318 * @param pVM The cross context VM structure. 8318 8319 * @param pVCpu The cross context virtual CPU structure. … … 8321 8322 * before using them. 8322 8323 */ 8323 DECLINLINE(void)hmR0VmxLoadGuestStateOptimal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx)8324 static VBOXSTRICTRC hmR0VmxLoadGuestStateOptimal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx) 8324 8325 { 8325 8326 HMVMX_ASSERT_PREEMPT_SAFE(); … … 8330 8331 #endif 8331 8332 8333 VBOXSTRICTRC rcStrict; 8332 8334 if (HMCPU_CF_IS_SET_ONLY(pVCpu, HM_CHANGED_GUEST_RIP)) 8333 8335 { 8334 int rc = hmR0VmxLoadGuestRip(pVCpu, pMixedCtx); 8335 AssertRC(rc); 8336 rcStrict = hmR0VmxLoadGuestRip(pVCpu, pMixedCtx); 8337 if (RT_LIKELY(rcStrict == VINF_SUCCESS)) 8338 { /* likely */} 8339 else 8340 { 8341 AssertLogRelMsgFailedReturn(("hmR0VmxLoadGuestStateOptimal: hmR0VmxLoadGuestRip failed! rc=%Rrc\n", 8342 VBOXSTRICTRC_VAL(rcStrict)), rcStrict); 8343 } 8336 8344 STAM_COUNTER_INC(&pVCpu->hm.s.StatLoadMinimal); 8337 8345 } 8338 8346 else if (HMCPU_CF_VALUE(pVCpu)) 8339 8347 { 8340 int rc = hmR0VmxLoadGuestState(pVM, pVCpu, pMixedCtx); 8341 AssertRC(rc); 8348 rcStrict = hmR0VmxLoadGuestState(pVM, pVCpu, pMixedCtx); 8349 if (RT_LIKELY(rcStrict == VINF_SUCCESS)) 8350 { /* likely */} 8351 else 8352 { 8353 AssertLogRelMsgFailedReturn(("hmR0VmxLoadGuestStateOptimal: hmR0VmxLoadGuestState failed! rc=%Rrc\n", 8354 VBOXSTRICTRC_VAL(rcStrict)), rcStrict); 8355 } 8342 8356 STAM_COUNTER_INC(&pVCpu->hm.s.StatLoadFull); 8343 8357 } … … 8347 8361 || HMCPU_CF_IS_PENDING_ONLY(pVCpu, HM_CHANGED_HOST_CONTEXT | HM_CHANGED_HOST_GUEST_SHARED_STATE), 8348 8362 ("fContextUseFlags=%#RX32\n", HMCPU_CF_VALUE(pVCpu))); 8363 return rcStrict; 8349 8364 } 8350 8365 … … 8446 8461 * Hence, this needs to be done -after- injection of events. 8447 8462 */ 8448 hmR0VmxLoadGuestStateOptimal(pVM, pVCpu, pMixedCtx); 8463 rcStrict = hmR0VmxLoadGuestStateOptimal(pVM, pVCpu, pMixedCtx); 8464 if (RT_LIKELY(rcStrict == VINF_SUCCESS)) 8465 { /* likely */ } 8466 else 8467 return rcStrict; 8449 8468 8450 8469 /* … … 8834 8853 8835 8854 /** @name Execution loop for single stepping, DBGF events and expensive Dtrace 8855 * probes. 8836 8856 * 8837 8857 * The following few functions and associated structure contains the bloat … … 9031 9051 9032 9052 /** 9033 * Configures exit controls for current DBGF and DTrace settings.9053 * Configures VM-exit controls for current DBGF and DTrace settings. 9034 9054 * 9035 9055 * This updates @a pDbgState and the VMCS execution control fields to reflect … … 9998 10018 9999 10019 /* 10000 * Restore exit control settings as we may not reenter this function the10020 * Restore VM-exit control settings as we may not reenter this function the 10001 10021 * next time around. 10002 10022 */
Note:
See TracChangeset
for help on using the changeset viewer.

