Changeset 59138 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Dec 15, 2015 4:39:21 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 104712
- Location:
- trunk/src/VBox/VMM/VMMR3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/VMM.cpp
r59132 r59138 1875 1875 { 1876 1876 Assert(!pVCpu->vmm.s.fInRendezvous); 1877 Log(("VMMR3EmtRendezvousFF: EMT%#u\n", pVCpu->idCpu)); 1877 1878 pVCpu->vmm.s.fInRendezvous = true; 1878 1879 VBOXSTRICTRC rcStrict = vmmR3EmtRendezvousCommon(pVM, pVCpu, false /* fIsCaller */, pVM->vmm.s.fRendezvousFlags, 1879 1880 pVM->vmm.s.pfnRendezvous, pVM->vmm.s.pvRendezvousUser); 1880 1881 pVCpu->vmm.s.fInRendezvous = false; 1882 Log(("VMMR3EmtRendezvousFF: EMT%#u returns %Rrc\n", pVCpu->idCpu, VBOXSTRICTRC_VAL(rcStrict))); 1881 1883 return VBOXSTRICTRC_TODO(rcStrict); 1882 1884 } … … 1919 1921 PFNVMMEMTRENDEZVOUS pfnRendezvous, void *pvUser) 1920 1922 { 1923 Log(("vmmR3EmtRendezvousRecursive: %#x EMT#%u depth=%d\n", fFlags, pVCpu->idCpu, pVM->vmm.s.cRendezvousRecursions)); 1921 1924 AssertLogRelReturn(pVM->vmm.s.cRendezvousRecursions < 3, VERR_DEADLOCK); 1925 Assert(pVCpu->vmm.s.fInRendezvous); 1922 1926 1923 1927 /* … … 2102 2106 ASMAtomicDecU32(&pVM->vmm.s.cRendezvousRecursions); 2103 2107 2108 Log(("vmmR3EmtRendezvousRecursive: %#x EMT#%u depth=%d returns %Rrc\n", 2109 fFlags, pVCpu->idCpu, pVM->vmm.s.cRendezvousRecursions, VBOXSTRICTRC_VAL(rcStrict))); 2104 2110 return rcStrict; 2105 2111 } … … 2148 2154 * Forward the request to an EMT thread. 2149 2155 */ 2156 { 2157 Log(("VMMR3EmtRendezvous: %#x non-EMT\n", fFlags)); 2150 2158 rcStrict = VMR3ReqCallWait(pVM, VMCPUID_ANY, 2151 2159 (PFNRT)VMMR3EmtRendezvous, 4, pVM, fFlags, pfnRendezvous, pvUser); 2160 Log(("VMMR3EmtRendezvous: %#x non-EMT returns %Rrc\n", fFlags, VBOXSTRICTRC_VAL(rcStrict))); 2161 } 2152 2162 else if (pVM->cCpus == 1) 2153 2163 { … … 2157 2167 if (!pVCpu->vmm.s.fInRendezvous) 2158 2168 { 2169 Log(("VMMR3EmtRendezvous: %#x EMT (uni)\n", fFlags)); 2159 2170 pVCpu->vmm.s.fInRendezvous = true; 2160 2171 pVM->vmm.s.fRendezvousFlags = fFlags; … … 2165 2176 { 2166 2177 /* Recursion. Do the same checks as in the SMP case. */ 2178 Log(("VMMR3EmtRendezvous: %#x EMT (uni), recursion depth=%d\n", fFlags, pVM->vmm.s.cRendezvousRecursions)); 2167 2179 uint32_t fType = pVM->vmm.s.fRendezvousFlags & VMMEMTRENDEZVOUS_FLAGS_TYPE_MASK; 2168 2180 AssertLogRelReturn( !pVCpu->vmm.s.fInRendezvous … … 2183 2195 pVM->vmm.s.cRendezvousRecursions--; 2184 2196 } 2197 Log(("VMMR3EmtRendezvous: %#x EMT (uni) returns %Rrc\n", fFlags, VBOXSTRICTRC_VAL(rcStrict))); 2185 2198 } 2186 2199 else … … 2206 2219 VERR_DEADLOCK); 2207 2220 2221 Log(("VMMR3EmtRendezvous: %#x EMT#%u, waiting for lock...\n", fFlags, pVCpu->idCpu)); 2208 2222 while (!ASMAtomicCmpXchgU32(&pVM->vmm.s.u32RendezvousLock, 0x77778888, 0)) 2209 2223 { … … 2220 2234 } 2221 2235 } 2236 2237 Log(("VMMR3EmtRendezvous: %#x EMT#%u\n", fFlags, pVCpu->idCpu)); 2222 2238 Assert(!VM_FF_IS_PENDING(pVM, VM_FF_EMT_RENDEZVOUS)); 2223 2239 Assert(!pVCpu->vmm.s.fInRendezvous); … … 2291 2307 || rcStrict > rcStrict3)) 2292 2308 rcStrict = rcStrict3; 2309 Log(("VMMR3EmtRendezvous: %#x EMT#%u returns %Rrc\n", fFlags, pVCpu->idCpu, VBOXSTRICTRC_VAL(rcStrict))); 2293 2310 } 2294 2311 … … 2298 2315 VERR_IPE_UNEXPECTED_INFO_STATUS); 2299 2316 return VBOXSTRICTRC_VAL(rcStrict); 2300 }2301 2302 2303 /**2304 * Disables/enables EMT rendezvous.2305 *2306 * This is used to make sure EMT rendezvous does not take place while2307 * processing a priority request.2308 *2309 * @returns Old rendezvous-disabled state.2310 * @param pVCpu The cross context virtual CPU structure of the calling EMT.2311 * @param fDisabled True if disabled, false if enabled.2312 */2313 VMMR3_INT_DECL(bool) VMMR3EmtRendezvousSetDisabled(PVMCPU pVCpu, bool fDisabled)2314 {2315 VMCPU_ASSERT_EMT(pVCpu);2316 bool fOld = pVCpu->vmm.s.fInRendezvous;2317 pVCpu->vmm.s.fInRendezvous = fDisabled;2318 return fOld;2319 2317 } 2320 2318 -
trunk/src/VBox/VMM/VMMR3/VMReq.cpp
r58126 r59138 1193 1193 { 1194 1194 LogFlow(("vmR3ReqProcessOneU: pReq=%p type=%d fFlags=%#x\n", pReq, pReq->enmType, pReq->fFlags)); 1195 1196 #if 1 /*def VBOX_STRICT */1197 /*1198 * Disable rendezvous if servicing a priority request. Priority requests1199 * can not make use of the EMT rendezvous API.1200 */1201 PVMCPU pVCpu = NULL;1202 bool fSavedInRendezvous = true;1203 bool const fPriorityReq = RT_BOOL(pReq->fFlags & VMREQFLAGS_PRIORITY);1204 if (fPriorityReq && pUVM->pVM)1205 {1206 pVCpu = VMMGetCpu(pUVM->pVM);1207 fSavedInRendezvous = VMMR3EmtRendezvousSetDisabled(pVCpu, true /*fDisabled*/);1208 }1209 #endif1210 1195 1211 1196 /* … … 1345 1330 } 1346 1331 1347 #if 1 /*def VBOX_STRICT */1348 /*1349 * Restore the rendezvous disabled state.1350 */1351 if (!fSavedInRendezvous)1352 VMMR3EmtRendezvousSetDisabled(pVCpu, false /*fDisabled*/);1353 #endif1354 1332 return rcRet; 1355 1333 }
Note:
See TracChangeset
for help on using the changeset viewer.