Changeset 32670 in vbox
- Timestamp:
- Sep 21, 2010 4:21:55 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 66085
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c
r32648 r32670 209 209 #endif 210 210 211 #if 0 212 #define DEBUG_HACKING 213 #include <iprt/string.h> 214 #include <iprt/asm-amd64-x86.h> 215 static void myLogBackdoorPrintf(const char *pszFormat, ...) 216 { 217 char szTmp[256]; 218 va_list args; 219 size_t cb; 220 221 cb = RTStrPrintf(szTmp, sizeof(szTmp) - 10, "%d: ", RTMpCpuId()); 222 va_start(args, pszFormat); 223 cb += RTStrPrintfV(&szTmp[cb], sizeof(szTmp) - cb, pszFormat, args); 224 va_end(args); 225 226 ASMOutStrU8(0x504, (uint8_t *)&szTmp[0], cb); 227 } 228 #define RTAssertMsg1Weak(pszExpr, uLine, pszFile, pszFunction) \ 229 myLogBackdoorPrintf("\n!!Guest Assertion failed!!\n%s(%d) %s\n%s\n", uLine, pszFile, pszFunction, (pszExpr)) 230 #define RTAssertMsg2Weak myLogBackdoorPrintf 231 #define dprintf(a) myLogBackdoorPrintf a 232 #else 233 #define dprintf(a) do { } while (0) 234 #endif 211 235 212 236 /** … … 215 239 DECLINLINE(void) rtTimerLnxSetState(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState) 216 240 { 241 #ifdef DEBUG_HACKING 242 dprintf(("set %d -> %d\n", *penmState, enmNewState)); 243 #endif 217 244 ASMAtomicWriteU32((uint32_t volatile *)penmState, enmNewState); 218 245 } … … 225 252 * @return false if xchg wasn't done. 226 253 */ 227 DECLINLINE(bool) rtTimerLnxCmpXchgState(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState, RTTIMERLNXSTATE enmCurState) 254 #ifdef DEBUG_HACKING 255 #define rtTimerLnxCmpXchgState(penmState, enmNewState, enmCurState) rtTimerLnxCmpXchgStateDebug(penmState, enmNewState, enmCurState, __LINE__) 256 static bool rtTimerLnxCmpXchgStateDebug(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState, 257 RTTIMERLNXSTATE enmCurState, uint32_t uLine) 258 { 259 RTTIMERLNXSTATE enmOldState = enmCurState; 260 bool fRc = ASMAtomicCmpXchgExU32((uint32_t volatile *)penmState, enmNewState, enmCurState, (uint32_t *)&enmOldState); 261 dprintf(("cxg %d -> %d - %d at %u\n", enmOldState, enmNewState, fRc, uLine)); 262 return fRc; 263 } 264 #else 265 DECLINLINE(bool) rtTimerLnxCmpXchgState(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState, 266 RTTIMERLNXSTATE enmCurState) 228 267 { 229 268 return ASMAtomicCmpXchgU32((uint32_t volatile *)penmState, enmNewState, enmCurState); 230 269 } 270 #endif 231 271 232 272 … … 312 352 pSubTimer->u.Std.u64NextTS = u64NextTS; 313 353 } 354 dprintf(("startsubtimer %p\n", pSubTimer->pParent)); 314 355 315 356 pSubTimer->iTick = 0; … … 349 390 static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes) 350 391 { 392 dprintf(("stopsubtimer %p %d\n", pSubTimer->pParent, fHighRes)); 351 393 #ifdef RTTIMER_LINUX_WITH_HRTIMER 352 394 if (fHighRes) … … 372 414 RTSPINLOCK hSpinlock = pTimer->hSpinlock; 373 415 Assert(pTimer->fSuspended); 416 dprintf(("destroyit %p\n", pTimer)); 374 417 375 418 /* … … 391 434 */ 392 435 ASMAtomicWriteU32(&pTimer->u32Magic, ~RTTIMER_MAGIC); 436 #if 0 /*fixme*/ 437 rtR0MemFreeNoCtxCheck(pTimer); 438 #else 393 439 RTMemFree(pTimer); 440 #endif 394 441 if (hSpinlock != NIL_RTSPINLOCK) 395 442 RTSpinlockDestroy(hSpinlock); … … 548 595 549 596 597 dprintf(("hrcallback %p\n", pTimer)); 550 598 if (RT_UNLIKELY(!rtTimerLnxChangeToCallbackState(pSubTimer))) 551 599 return HRTIMER_NORESTART; … … 634 682 PRTTIMER pTimer = pSubTimer->pParent; 635 683 684 dprintf(("hrcallback %p\n", pTimer)); 636 685 if (RT_UNLIKELY(!rtTimerLnxChangeToCallbackState(pSubTimer))) 637 686 return; … … 1094 1143 if (!ASMAtomicUoReadBool(&pTimer->fSuspended)) 1095 1144 return VERR_TIMER_ACTIVE; 1145 dprintf(("start %p\n", pTimer)); 1096 1146 1097 1147 Args.u64First = u64First; … … 1138 1188 case RTTIMERLNXSTATE_CALLBACK: 1139 1189 case RTTIMERLNXSTATE_CB_STOPPING: 1140 if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_ ACTIVE, enmState))1190 if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_CB_RESTARTING, enmState)) 1141 1191 { 1142 1192 ASMAtomicWriteBool(&pTimer->fSuspended, false); … … 1164 1214 static bool rtTimerLnxStop(PRTTIMER pTimer, bool fForDestroy) 1165 1215 { 1216 dprintf(("lnxstop %p %d\n", pTimer, fForDestroy)); 1166 1217 #ifdef CONFIG_SMP 1167 1218 /* … … 1228 1279 AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); 1229 1280 AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); 1281 dprintf(("stop %p\n", pTimer)); 1230 1282 1231 1283 if (ASMAtomicUoReadBool(&pTimer->fSuspended)) … … 1246 1298 AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); 1247 1299 AssertReturn(u64NanoInterval, VERR_INVALID_PARAMETER); 1300 dprintf(("change %p %llu\n", pTimer, u64NanoInterval)); 1248 1301 1249 1302 #ifdef RTTIMER_LINUX_WITH_HRTIMER … … 1282 1335 AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); 1283 1336 AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); 1337 dprintf(("destroy %p\n", pTimer)); 1284 1338 1285 1339 /* … … 1439 1493 #endif /* CONFIG_SMP */ 1440 1494 1495 dprintf(("create %p\n", pTimer)); 1441 1496 *ppTimer = pTimer; 1442 1497 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.