- Timestamp:
- Jun 9, 2010 12:14:59 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asm.h
r29286 r30111 470 470 #endif 471 471 } 472 473 474 /** 475 * Convenience macro for avoiding the annoying casting with ASMAtomicXchgPtr. 476 * 477 * @returns Current *pv value 478 * @param ppv Pointer to the pointer variable to update. 479 * @param pv The pointer value to assign to *ppv. 480 * @param Type The type of *ppv, sans volatile. 481 */ 482 #ifdef __GNUC__ 483 # define ASMAtomicXchgPtrT(ppv, pv, Type) \ 484 __extension__ \ 485 ({\ 486 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 487 Type const pvTypeChecked = (pv); \ 488 Type pvTypeCheckedRet = (__typeof__(*(ppv))) ASMAtomicXchgPtr((void * volatile *)ppvTypeChecked, (void *)pvTypeChecked); \ 489 pvTypeCheckedRet; \ 490 }) 491 #else 492 # define ASMAtomicXchgPtrT(ppv, pv, Type) \ 493 (Type)ASMAtomicXchgPtr((void * volatile *)(ppv), (void *)(pv)) 494 #endif 472 495 473 496 … … 849 872 * @param pvOld The old value to *ppv compare with. 850 873 */ 851 DECLINLINE(bool) ASMAtomicCmpXchgPtr (void * volatile *ppv, const void *pvNew, const void *pvOld)874 DECLINLINE(bool) ASMAtomicCmpXchgPtrVoid(void * volatile *ppv, const void *pvNew, const void *pvOld) 852 875 { 853 876 #if ARCH_BITS == 32 … … 859 882 #endif 860 883 } 884 885 886 /** 887 * Atomically Compare and Exchange a pointer value, ordered. 888 * 889 * @returns true if xchg was done. 890 * @returns false if xchg wasn't done. 891 * 892 * @param ppv Pointer to the value to update. 893 * @param pvNew The new value to assigned to *ppv. 894 * @param pvOld The old value to *ppv compare with. 895 * 896 * @remarks This is relatively type safe on GCC platforms. 897 */ 898 #ifdef __GNUC__ 899 # define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ 900 __extension__ \ 901 ({\ 902 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 903 __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ 904 __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ 905 bool fMacroRet = ASMAtomicCmpXchgPtrVoid((void * volatile *)ppvTypeChecked, \ 906 (void *)pvNewTypeChecked, (void *)pvOldTypeChecked); \ 907 fMacroRet; \ 908 }) 909 #else 910 # define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ 911 ASMAtomicCmpXchgPtrVoid((void * volatile *)(ppv), (void *)(pvNew), (void *)(pvOld)) 912 #endif 861 913 862 914 … … 1176 1228 * @param ppvOld Pointer store the old value at. 1177 1229 */ 1178 DECLINLINE(bool) ASMAtomicCmpXchgExPtr (void * volatile *ppv, const void *pvNew, const void *pvOld, void **ppvOld)1230 DECLINLINE(bool) ASMAtomicCmpXchgExPtrVoid(void * volatile *ppv, const void *pvNew, const void *pvOld, void **ppvOld) 1179 1231 { 1180 1232 #if ARCH_BITS == 32 … … 1186 1238 #endif 1187 1239 } 1240 1241 1242 /** 1243 * Atomically Compare and Exchange a pointer value, additionally 1244 * passing back old value, ordered. 1245 * 1246 * @returns true if xchg was done. 1247 * @returns false if xchg wasn't done. 1248 * 1249 * @param ppv Pointer to the value to update. 1250 * @param pvNew The new value to assigned to *ppv. 1251 * @param pvOld The old value to *ppv compare with. 1252 * @param ppvOld Pointer store the old value at. 1253 * 1254 * @remarks This is relatively type safe on GCC platforms. 1255 */ 1256 #ifdef __GNUC__ 1257 # define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ 1258 __extension__ \ 1259 ({\ 1260 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 1261 __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ 1262 __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ 1263 __typeof__(*(ppv)) * const ppvOldTypeChecked = (ppvOld); \ 1264 bool fMacroRet = ASMAtomicCmpXchgExPtrVoid((void * volatile *)ppvTypeChecked, \ 1265 (void *)pvNewTypeChecked, (void *)pvOldTypeChecked, \ 1266 (void **)ppvOld); \ 1267 fMacroRet; \ 1268 }) 1269 #else 1270 # define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ 1271 ASMAtomicCmpXchgExPtrVoid((void * volatile *)(ppv), (void *)(pvNew), (void *)pvOld, (void **)ppvOld) 1272 #endif 1188 1273 1189 1274 … … 1903 1988 * @returns Current *pv value 1904 1989 * @param ppv Pointer to the pointer variable to read. 1990 * 1991 * @remarks Please use ASMAtomicReadPtrT, it provides better type safety and 1992 * requires less typing (no casts). 1905 1993 */ 1906 1994 DECLINLINE(void *) ASMAtomicReadPtr(void * volatile *ppv) … … 1915 2003 } 1916 2004 1917 1918 /** 1919 * Atomically reads a pointer value, unordered. 2005 /** 2006 * Convenience macro for avoiding the annoying casting with ASMAtomicReadPtr. 1920 2007 * 1921 2008 * @returns Current *pv value 1922 2009 * @param ppv Pointer to the pointer variable to read. 2010 * @param Type The type of *ppv, sans volatile. 2011 */ 2012 #ifdef __GNUC__ 2013 # define ASMAtomicReadPtrT(ppv, Type) \ 2014 __extension__ \ 2015 ({\ 2016 __typeof__(*(ppv)) volatile *ppvTypeChecked = (ppv); \ 2017 Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicReadPtr((void * volatile *)ppvTypeChecked); \ 2018 pvTypeChecked; \ 2019 }) 2020 #else 2021 # define ASMAtomicReadPtrT(ppv, Type) \ 2022 (Type)ASMAtomicReadPtr((void * volatile *)(ppv)) 2023 #endif 2024 2025 2026 /** 2027 * Atomically reads a pointer value, unordered. 2028 * 2029 * @returns Current *pv value 2030 * @param ppv Pointer to the pointer variable to read. 2031 * 2032 * @remarks Please use ASMAtomicUoReadPtrT, it provides better type safety and 2033 * requires less typing (no casts). 1923 2034 */ 1924 2035 DECLINLINE(void *) ASMAtomicUoReadPtr(void * volatile *ppv) … … 1932 2043 #endif 1933 2044 } 2045 2046 2047 /** 2048 * Convenience macro for avoiding the annoying casting with ASMAtomicUoReadPtr. 2049 * 2050 * @returns Current *pv value 2051 * @param ppv Pointer to the pointer variable to read. 2052 * @param Type The type of *ppv, sans volatile. 2053 */ 2054 #ifdef __GNUC__ 2055 # define ASMAtomicUoReadPtrT(ppv, Type) \ 2056 __extension__ \ 2057 ({\ 2058 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 2059 Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicUoReadPtr((void * volatile *)ppvTypeChecked); \ 2060 pvTypeChecked; \ 2061 }) 2062 #else 2063 # define ASMAtomicUoReadPtrT(ppv, Type) \ 2064 (Type)ASMAtomicUoReadPtr((void * volatile *)(ppv)) 2065 #endif 1934 2066 1935 2067 … … 2286 2418 * @returns Current *pv value 2287 2419 * @param ppv Pointer to the pointer variable. 2288 * @param pv The pointer value to assign eto *ppv.2289 */ 2290 DECLINLINE(void) ASMAtomicWritePtr (void * volatile *ppv, const void *pv)2420 * @param pv The pointer value to assign to *ppv. 2421 */ 2422 DECLINLINE(void) ASMAtomicWritePtrVoid(void * volatile *ppv, const void *pv) 2291 2423 { 2292 2424 #if ARCH_BITS == 32 … … 2301 2433 2302 2434 /** 2303 * Atomically writes a pointer value, unordered.2435 * Convenience macro for avoiding the annoying casting with ASMAtomicWritePtr. 2304 2436 * 2305 2437 * @returns Current *pv value 2306 2438 * @param ppv Pointer to the pointer variable. 2307 * @param pv The pointer value to assigne to *ppv. 2308 */ 2309 DECLINLINE(void) ASMAtomicUoWritePtr(void * volatile *ppv, const void *pv) 2310 { 2311 #if ARCH_BITS == 32 2312 ASMAtomicUoWriteU32((volatile uint32_t *)(void *)ppv, (uint32_t)pv); 2313 #elif ARCH_BITS == 64 2314 ASMAtomicUoWriteU64((volatile uint64_t *)(void *)ppv, (uint64_t)pv); 2315 #else 2316 # error "ARCH_BITS is bogus" 2317 #endif 2318 } 2439 * @param pv The pointer value to assign to *ppv. If NULL, you may have 2440 * to cast it to the right pointer type for GCC to be happy. 2441 * 2442 * @remarks This is relatively type safe on GCC platforms when @a pv isn't 2443 * NULL. 2444 */ 2445 #ifdef __GNUC__ 2446 # define ASMAtomicWritePtr(ppv, pv) \ 2447 do \ 2448 { \ 2449 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 2450 __typeof__(*(ppv)) const pvTypeChecked = (pv); \ 2451 \ 2452 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2453 AssertCompile(sizeof(pv) == sizeof(void *)); \ 2454 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2455 \ 2456 ASMAtomicWritePtrVoid((void * volatile *)(ppvTypeChecked), (void *)(pvTypeChecked)); \ 2457 } while (0) 2458 #else 2459 # define ASMAtomicWritePtr(ppv, pv) \ 2460 do \ 2461 { \ 2462 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2463 AssertCompile(sizeof(pv) == sizeof(void *)); \ 2464 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2465 \ 2466 ASMAtomicWritePtrVoid((void * volatile *)(ppv), (void *)(pv)); \ 2467 } while (0) 2468 #endif 2469 2470 2471 /** 2472 * Convenience macro for avoiding the annoying casting involved when using 2473 * ASMAtomicWritePtr. 2474 * 2475 * @returns Current *pv value 2476 * @param ppv Pointer to the pointer variable. 2477 * @param pv The pointer value to assign to *ppv. 2478 * 2479 * @remarks This is relatively type safe on GCC platforms when @a pv isn't 2480 * NULL. 2481 */ 2482 #ifdef __GNUC__ 2483 # define ASMAtomicUoWritePtr(ppv, pv) \ 2484 do \ 2485 { \ 2486 __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ 2487 __typeof__(*(ppv)) const pvTypeChecked = (pv); \ 2488 \ 2489 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2490 AssertCompile(sizeof(pv) == sizeof(void *)); \ 2491 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2492 \ 2493 *(ppvTypeChecked) = pvTypeChecked; \ 2494 } while (0) 2495 #else 2496 # define ASMAtomicUoWritePtr(ppv, pv) \ 2497 do \ 2498 { \ 2499 AssertCompile(sizeof(*ppv) == sizeof(void *)); \ 2500 AssertCompile(sizeof(pv) == sizeof(void *)); \ 2501 Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ 2502 *(ppv) = pv; \ 2503 } while (0) 2504 #endif 2319 2505 2320 2506 -
trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
r30029 r30111 1775 1775 PINTNETDSTTAB pOld = pIf->pDstTab; 1776 1776 if ( pOld 1777 && ASMAtomicCmpXchgPtr( (void * volatile *)&pIf->pDstTab, pNew, pOld))1777 && ASMAtomicCmpXchgPtr(&pIf->pDstTab, pNew, pOld)) 1778 1778 { 1779 1779 RTMemFree(pOld); … … 3294 3294 * Grab the destination table. 3295 3295 */ 3296 PINTNETDSTTAB pDstTab = (PINTNETDSTTAB)ASMAtomicXchgPtr((void * volatile *)&pIf->pDstTab, NULL);3296 PINTNETDSTTAB pDstTab = ASMAtomicXchgPtrT(&pIf->pDstTab, NULL, PINTNETDSTTAB); 3297 3297 if (RT_LIKELY(pDstTab)) 3298 3298 { … … 3357 3357 */ 3358 3358 Assert(!pIf->pDstTab); 3359 ASMAtomicWritePtr( (void * volatile *)&pIf->pDstTab, pDstTab);3359 ASMAtomicWritePtr(&pIf->pDstTab, pDstTab); 3360 3360 } 3361 3361 else -
trunk/src/VBox/Devices/Storage/DevAHCI.cpp
r29879 r30111 3892 3892 bool fAssertIntr = false; 3893 3893 PAHCI pAhci = pAhciPort->CTX_SUFF(pAhci); 3894 PAHCIPORTTASKSTATE pTaskErr = (PAHCIPORTTASKSTATE)ASMAtomicReadPtr((void * volatile *)&pAhciPort->pTaskErr);3894 PAHCIPORTTASKSTATE pTaskErr = ASMAtomicReadPtrT(&pAhciPort->pTaskErr, PAHCIPORTTASKSTATE); 3895 3895 3896 3896 ahciLog(("%s: Building SDB FIS\n", __FUNCTION__)); … … 4900 4900 pAhciPortTaskState->cbTransfer, rcReq)); 4901 4901 } 4902 ASMAtomicCmpXchgPtr( (void * volatile *)&pAhciPort->pTaskErr, pAhciPortTaskState, NULL);4902 ASMAtomicCmpXchgPtr(&pAhciPort->pTaskErr, pAhciPortTaskState, NULL); 4903 4903 } 4904 4904 else … … 4932 4932 cOutstandingTasks = ASMAtomicDecU32(&pAhciPort->uActTasksActive); 4933 4933 ahciLog(("%s: After decrement uActTasksActive=%u\n", __FUNCTION__, cOutstandingTasks)); 4934 if (RT_SUCCESS(rcReq) && !ASMAtomicReadPtr ((void * volatile *)&pAhciPort->pTaskErr))4934 if (RT_SUCCESS(rcReq) && !ASMAtomicReadPtrT(&pAhciPort->pTaskErr, PAHCIPORTTASKSTATE)) 4935 4935 ASMAtomicOrU32(&pAhciPort->u32QueuedTasksFinished, (1 << pAhciPortTaskState->uTag)); 4936 4936 … … 5190 5190 { 5191 5191 LogFlow(("Reading error page\n")); 5192 PAHCIPORTTASKSTATE pTaskErr = (PAHCIPORTTASKSTATE)ASMAtomicXchgPtr((void * volatile *)&pAhciPort->pTaskErr, NULL);5192 PAHCIPORTTASKSTATE pTaskErr = ASMAtomicXchgPtrT(&pAhciPort->pTaskErr, NULL, PAHCIPORTTASKSTATE); 5193 5193 if (pTaskErr) 5194 5194 { -
trunk/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp
r29495 r30111 490 490 Assert(pReqActive->pIoReq == pIoReq); 491 491 492 ASMAtomic XchgPtr((void * volatile *)&pReqActive->pIoReq, NULL);492 ASMAtomicWritePtr(&pReqActive->pIoReq, NULL); 493 493 } 494 494 … … 520 520 { 521 521 PDRVDISKAIOREQACTIVE pReqActive = &pThis->apReqActive[i]; 522 PDRVDISKAIOREQ pIoReq = (PDRVDISKAIOREQ)ASMAtomicReadPtr((void * volatile *)&pReqActive->pIoReq);522 PDRVDISKAIOREQ pIoReq = ASMAtomicReadPtrT(&pReqActive->pIoReq, PDRVDISKAIOREQ); 523 523 524 524 if ( pIoReq -
trunk/src/VBox/Devices/Storage/DrvVD.cpp
r29135 r30111 1159 1159 PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns); 1160 1160 1161 RTSEMFASTMUTEX mutex = (RTSEMFASTMUTEX)ASMAtomicXchgPtr((void **)&pThis->MergeCompleteMutex,1162 (void *)NIL_RTSEMFASTMUTEX);1161 RTSEMFASTMUTEX mutex; 1162 ASMAtomicXchgHandle(&pThis->MergeCompleteMutex, NIL_RTSEMFASTMUTEX, &mutex); 1163 1163 if (mutex != NIL_RTSEMFASTMUTEX) 1164 1164 { -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQuartz2D.cpp
r28800 r30111 92 92 * ASMAtomic(Cmp)XchgPtr and a struct { cAllocated; cRects; aRects[1]; } 93 93 * *mRegion, *mUnusedRegion; should suffice (and permit you to reuse allocations). */ 94 RegionRects *rgnRcts = (RegionRects *)ASMAtomicXchgPtr((void * volatile *) &mRegionUnused, NULL);94 RegionRects *rgnRcts = ASMAtomicXchgPtrT(&mRegionUnused, NULL, RegionRects *); 95 95 if (rgnRcts && rgnRcts->allocated < aCount) 96 96 { … … 143 143 // printf ("..................................\n"); 144 144 145 void *pvOld = ASMAtomicXchgPtr((void * volatile *)&mRegion, rgnRcts);146 if ( p vOld147 && !ASMAtomicCmpXchgPtr( (void * volatile *)&mRegionUnused, pvOld, NULL))148 RTMemFree (pvOld);145 RegionRects *pOld = ASMAtomicXchgPtrT(&mRegion, rgnRcts, RegionRects *); 146 if ( pOld 147 && !ASMAtomicCmpXchgPtr(&mRegionUnused, pOld, NULL)) 148 RTMemFree(pOld); 149 149 150 150 QApplication::postEvent(m_pMachineView, new UISetRegionEvent (reg)); … … 203 203 #endif 204 204 /* Grab the current visible region. */ 205 RegionRects *rgnRcts = (RegionRects *)ASMAtomicXchgPtr((void * volatile *)&mRegion, NULL);205 RegionRects *rgnRcts = ASMAtomicXchgPtrT(&mRegion, NULL, RegionRects *); 206 206 if (rgnRcts) 207 207 { … … 216 216 } 217 217 /* Put back the visible region, free if we cannot (2+ SetVisibleRegion calls). */ 218 if ( !ASMAtomicCmpXchgPtr( (void * volatile *)&mRegion, rgnRcts, NULL)219 && !ASMAtomicCmpXchgPtr( (void * volatile *)&mRegionUnused, rgnRcts, NULL))218 if ( !ASMAtomicCmpXchgPtr(&mRegion, rgnRcts, NULL) 219 && !ASMAtomicCmpXchgPtr(&mRegionUnused, rgnRcts, NULL)) 220 220 RTMemFree(rgnRcts); 221 221 } -
trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
r28800 r30111 508 508 if (g_pSUPGlobalInfoPage) 509 509 { 510 ASMAtomic XchgPtr((void * volatile *)&g_pSUPGlobalInfoPage, NULL);511 ASMAtomic XchgPtr((void * volatile *)&g_pSUPGlobalInfoPageR0, NULL);512 ASMAtomic XchgSize(&g_HCPhysSUPGlobalInfoPage, NIL_RTHCPHYS);510 ASMAtomicWritePtr((void * volatile *)&g_pSUPGlobalInfoPage, NULL); 511 ASMAtomicWritePtr((void * volatile *)&g_pSUPGlobalInfoPageR0, NULL); 512 ASMAtomicWriteSize(&g_HCPhysSUPGlobalInfoPage, NIL_RTHCPHYS); 513 513 /* just a little safe guard against threads using the page. */ 514 514 RTThreadSleep(50); -
trunk/src/VBox/HostDrivers/Support/SUPR0IdcClient.c
r29261 r30111 125 125 && (Req.u.Out.uSessionVersion & UINT32_C(0xffff0000)) == (SUPDRV_IDC_VERSION & UINT32_C(0xffff0000))) 126 126 { 127 ASMAtomicCmpXchgPtr( (void * volatile *)&g_pMainHandle, pHandle, NULL);127 ASMAtomicCmpXchgPtr(&g_pMainHandle, pHandle, NULL); 128 128 return rc; 129 129 } … … 167 167 { 168 168 pHandle->s.pSession = NULL; 169 ASMAtomicCmpXchgPtr( (void * volatile *)&g_pMainHandle, NULL, pHandle);169 ASMAtomicCmpXchgPtr(&g_pMainHandle, NULL, pHandle); 170 170 } 171 171 return rc; … … 203 203 PSUPDRVIDCHANDLE supR0IdcGetHandleFromSession(PSUPDRVSESSION pSession) 204 204 { 205 PSUPDRVIDCHANDLE pHandle = (PSUPDRVIDCHANDLE)ASMAtomicUoReadPtr((void * volatile *)&g_pMainHandle);205 PSUPDRVIDCHANDLE pHandle = ASMAtomicUoReadPtrT(&g_pMainHandle, PSUPDRVIDCHANDLE); 206 206 if ( VALID_PTR(pHandle) 207 207 && pHandle->s.pSession == pSession) -
trunk/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp
r28800 r30111 179 179 * Clean up the session. 180 180 */ 181 PSUPSVCGRANT pParent = (PSUPSVCGRANT)ASMAtomicReadPtr((void * volatile *)&pThis->pParent);181 PSUPSVCGRANT pParent = ASMAtomicReadPtrT(&pThis->pParent, PSUPSVCGRANT); 182 182 if (pParent) 183 183 RTCritSectEnter(&pParent->CritSect); … … 975 975 unsigned cSessions = 0; 976 976 for (PSUPSVCGRANTSESSION pCur = pThis->pSessionHead; pCur; pCur = pCur->pNext) 977 ASMAtomicWritePtr( (void * volatile *)&pCur->pParent, NULL);977 ASMAtomicWritePtr(&pCur->pParent, NULL); 978 978 979 979 RTCritSectLeave(&pThis->CritSect); -
trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
r29662 r30111 236 236 if (!ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost)) 237 237 { 238 pIfNet = (ifnet_t)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pIfNet);238 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t); 239 239 if (pIfNet) 240 240 ifnet_reference(pIfNet); … … 666 666 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 667 667 668 pIfNet = (ifnet_t)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pIfNet);668 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t); 669 669 int cPromisc = VALID_PTR(pIfNet) ? VBOX_GET_PCOUNT(pIfNet) : - 1; 670 670 671 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pIfNet, NULL);672 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pIfFilter, NULL);671 ASMAtomicUoWritePtr(&pThis->u.s.pIfNet, NULL); 672 ASMAtomicUoWritePtr(&pThis->u.s.pIfFilter, NULL); 673 673 ASMAtomicWriteBool(&pThis->u.s.fNeedSetPromiscuous, false); 674 674 pThis->u.s.fSetPromiscuous = false; … … 914 914 RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER; 915 915 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 916 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pIfNet, pIfNet);916 ASMAtomicUoWritePtr(&pThis->u.s.pIfNet, pIfNet); 917 917 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 918 918 … … 940 940 941 941 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 942 pIfNet = (ifnet_t)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pIfNet);942 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t); 943 943 if (pIfNet && !err) 944 944 { 945 945 ASMAtomicUoWriteBool(&pThis->fDisconnectedFromHost, false); 946 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pIfFilter, pIfFilter);946 ASMAtomicUoWritePtr(&pThis->u.s.pIfFilter, pIfFilter); 947 947 pIfNet = NULL; /* don't dereference it */ 948 948 } … … 1162 1162 */ 1163 1163 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 1164 pIfFilter = (interface_filter_t)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pIfFilter);1164 pIfFilter = ASMAtomicUoReadPtrT(&pThis->u.s.pIfFilter, interface_filter_t); 1165 1165 if (pIfFilter) 1166 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pIfFilter, NULL);1166 ASMAtomicUoWritePtr(&pThis->u.s.pIfFilter, NULL); 1167 1167 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1168 1168 -
trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c
r29747 r30111 498 498 int error; 499 499 500 ifp = (void *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);500 ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *); 501 501 502 502 if (fDst & INTNETTRUNKDIR_WIRE) … … 568 568 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 569 569 570 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.ifp, ifp);570 ASMAtomicUoWritePtr(&pThis->u.s.ifp, ifp); 571 571 pThis->u.s.node = node; 572 572 bcopy(IF_LLADDR(ifp), &pThis->u.s.MacAddr, ETHER_ADDR_LEN); … … 611 611 struct ifnet *ifp, *ifp0; 612 612 613 ifp = (struct ifnet *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);613 ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *); 614 614 /* 615 615 * Attempt to check if the interface is still there and re-initialize if … … 669 669 Log(("%s: fActive:%d\n", __func__, fActive)); 670 670 671 ifp = (struct ifnet *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);672 node = (node_p)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.node);671 ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *); 672 node = ASMAtomicUoReadPtrT(&pThis->u.s.node, node_p); 673 673 674 674 memset(&ifreq, 0, sizeof(struct ifreq)); -
trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
r30059 r30111 171 171 #ifdef VBOXNETFLT_WITH_QDISC 172 172 //#define QDISC_LOG(x) printk x 173 #define QDISC_LOG(x) 173 #define QDISC_LOG(x) do { } while (0) 174 174 175 175 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20) … … 593 593 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) 594 594 pPriv->ppSaved[0] = pDev->qdisc_sleeping; 595 ASMAtomicWritePtr( (void * volatile *)&pDev->qdisc_sleeping, pNew);596 ASMAtomicWritePtr( (void * volatile *)&pDev->qdisc, pNew);595 ASMAtomicWritePtr(&pDev->qdisc_sleeping, pNew); 596 ASMAtomicWritePtr(&pDev->qdisc, pNew); 597 597 #else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) */ 598 598 for (i = 0; i < pDev->num_tx_queues; i++) … … 601 601 602 602 pPriv->ppSaved[i] = pQueue->qdisc_sleeping; 603 ASMAtomicWritePtr( (void * volatile *)&pQueue->qdisc_sleeping, pNew);604 ASMAtomicWritePtr( (void * volatile *)&pQueue->qdisc, pNew);603 ASMAtomicWritePtr(&pQueue->qdisc_sleeping, pNew); 604 ASMAtomicWritePtr(&pQueue->qdisc, pNew); 605 605 if (i) 606 606 atomic_inc(&pNew->refcnt); … … 609 609 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) 610 610 pPriv->ppSaved[pDev->num_tx_queues] = pDev->qdisc; 611 ASMAtomicWritePtr( (void * volatile *)&pDev->qdisc, pNew);611 ASMAtomicWritePtr(&pDev->qdisc, pNew); 612 612 atomic_inc(&pNew->refcnt); 613 613 # endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) */ … … 619 619 pPriv = qdisc_priv(pExisting); 620 620 } 621 ASMAtomicWritePtr( (void * volatile *)&pPriv->pVBoxNetFlt, pThis);621 ASMAtomicWritePtr(&pPriv->pVBoxNetFlt, pThis); 622 622 QDISC_LOG(("vboxNetFltLinuxInstallQdisc: pThis=%p\n", pPriv->pVBoxNetFlt)); 623 623 } … … 631 631 struct Qdisc *pQdisc; 632 632 if (!pDev) 633 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);633 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 634 634 if (!VALID_PTR(pDev)) 635 635 { … … 651 651 pPriv = qdisc_priv(pQdisc); 652 652 Assert(pPriv->pVBoxNetFlt == pThis); 653 ASMAtomicWritePtr( (void * volatile *)&pPriv->pVBoxNetFlt, NULL);654 655 QDISC_LOG(("vboxNetFltLinuxQdiscRemove: refcnt=%d num_tx_queues=%d\n", 653 ASMAtomicWritePtr(&pPriv->pVBoxNetFlt, NULL); 654 655 QDISC_LOG(("vboxNetFltLinuxQdiscRemove: refcnt=%d num_tx_queues=%d\n", 656 656 atomic_read(&pQdisc->refcnt), pDev->num_tx_queues)); 657 657 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) … … 659 659 if (pPriv->ppSaved[0]) 660 660 { 661 ASMAtomicWritePtr((void * volatile *)&pDev->qdisc_sleeping, 662 pPriv->ppSaved[0]); 663 ASMAtomicWritePtr((void * volatile *)&pDev->qdisc, 664 pPriv->ppSaved[0]); 661 ASMAtomicWritePtr(&pDev->qdisc_sleeping, pPriv->ppSaved[0]); 662 ASMAtomicWritePtr(&pDev->qdisc, pPriv->ppSaved[0]); 665 663 pPriv->ppSaved[0] = NULL; 666 664 while (QDISC_IS_BUSY(pDev, pQdisc)) … … 675 673 { 676 674 Assert(pQueue->qdisc_sleeping == pQdisc); 677 ASMAtomicWritePtr((void * volatile *)&pQueue->qdisc_sleeping, 678 pPriv->ppSaved[i]); 679 ASMAtomicWritePtr((void * volatile *)&pQueue->qdisc, 680 pPriv->ppSaved[i]); 675 ASMAtomicWritePtr(&pQueue->qdisc_sleeping, pPriv->ppSaved[i]); 676 ASMAtomicWritePtr(&pQueue->qdisc, pPriv->ppSaved[i]); 681 677 pPriv->ppSaved[i] = NULL; 682 678 while (QDISC_IS_BUSY(pDev, pQdisc)) … … 687 683 /* Newer kernels store root qdisc in netdev structure as well. */ 688 684 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) 689 ASMAtomicWritePtr((void * volatile *)&pDev->qdisc, 690 pPriv->ppSaved[pDev->num_tx_queues]); 685 ASMAtomicWritePtr(&pDev->qdisc, pPriv->ppSaved[pDev->num_tx_queues]); 691 686 pPriv->ppSaved[pDev->num_tx_queues] = NULL; 692 687 while (QDISC_IS_BUSY(pDev, pQdisc)) … … 912 907 913 908 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); /* (this isn't necessary, but so what) */ 914 ASMAtomic XchgPtr((void * volatile *)&pDev->netdev_ops, pOverride);909 ASMAtomicWritePtr((void * volatile *)&pDev->netdev_ops, pOverride); 915 910 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 916 911 } … … 930 925 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 931 926 if (!pDev) 932 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);927 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 933 928 if (VALID_PTR(pDev)) 934 929 { … … 939 934 ) 940 935 { 941 ASMAtomic XchgPtr((void * volatile *)&pDev->netdev_ops, pOverride->pOrgOps);936 ASMAtomicWritePtr((void * volatile *)&pDev->netdev_ops, pOverride->pOrgOps); 942 937 ASMAtomicWriteU32(&pOverride->u32Magic, 0); 943 938 } … … 990 985 return pDev; 991 986 #else 992 return (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);987 return ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 993 988 #endif 994 989 } … … 1060 1055 * Allocate a packet and copy over the data. 1061 1056 */ 1062 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);1057 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 1063 1058 pPkt = dev_alloc_skb(pSG->cbTotal + NET_IP_ALIGN); 1064 1059 if (RT_UNLIKELY(!pPkt)) … … 1282 1277 1283 1278 pThis = VBOX_FLT_PT_TO_INST(pPacketType); 1284 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);1279 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 1285 1280 if (pThis->u.s.pDev != pSkbDev) 1286 1281 { … … 1820 1815 1821 1816 pSwitchPort = pThis->pSwitchPort; /* this doesn't need to be here, but it doesn't harm. */ 1822 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);1817 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 1823 1818 if (pDev) 1824 1819 fFeatures = pDev->features; … … 1887 1882 1888 1883 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 1889 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pDev, pDev);1884 ASMAtomicUoWritePtr(&pThis->u.s.pDev, pDev); 1890 1885 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1891 1886 1892 1887 Log(("vboxNetFltLinuxAttachToInterface: Device %p(%s) retained. ref=%d\n", pDev, pDev->name, atomic_read(&pDev->refcnt))); 1893 Log(("vboxNetFltLinuxAttachToInterface: Got pDev=%p pThis=%p pThis->u.s.pDev=%p\n", pDev, pThis, ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pDev)));1888 Log(("vboxNetFltLinuxAttachToInterface: Got pDev=%p pThis=%p pThis->u.s.pDev=%p\n", pDev, pThis, ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *))); 1894 1889 1895 1890 /* Get the mac address while we still have a valid net_device reference. */ … … 1916 1911 */ 1917 1912 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 1918 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);1913 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 1919 1914 if (pDev) 1920 1915 { … … 1951 1946 #endif /* VBOXNETFLT_WITH_QDISC */ 1952 1947 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 1953 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pDev, NULL);1948 ASMAtomicUoWritePtr(&pThis->u.s.pDev, NULL); 1954 1949 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1955 1950 dev_put(pDev); … … 1978 1973 ASMAtomicWriteBool(&pThis->u.s.fRegistered, false); 1979 1974 ASMAtomicWriteBool(&pThis->fDisconnectedFromHost, true); 1980 ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pDev, NULL);1975 ASMAtomicUoWritePtr(&pThis->u.s.pDev, NULL); 1981 1976 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); 1982 1977 … … 2068 2063 2069 2064 Log(("VBoxNetFlt: got event %s(0x%lx) on %s, pDev=%p pThis=%p pThis->u.s.pDev=%p\n", 2070 vboxNetFltLinuxGetNetDevEventName(ulEventType), ulEventType, pDev->name, pDev, pThis, ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pDev)));2065 vboxNetFltLinuxGetNetDevEventName(ulEventType), ulEventType, pDev->name, pDev, pThis, ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *))); 2071 2066 if ( ulEventType == NETDEV_REGISTER 2072 2067 && !strcmp(pDev->name, pThis->szName)) … … 2076 2071 else 2077 2072 { 2078 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);2073 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 2079 2074 if (pDev == ptr) 2080 2075 { … … 2111 2106 int vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *pvIfData, PINTNETSG pSG, uint32_t fDst) 2112 2107 { 2113 NOREF(pvIfData);2114 2115 2108 struct net_device * pDev; 2116 2109 int err; 2117 2110 int rc = VINF_SUCCESS; 2111 NOREF(pvIfData); 2118 2112 2119 2113 LogFlow(("vboxNetFltPortOsXmit: pThis=%p (%s)\n", pThis, pThis->szName)); … … 2274 2268 2275 2269 RTSpinlockAcquireNoInts(pThis->hSpinlock, &Tmp); 2276 pDev = (struct net_device *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.pDev);2270 pDev = ASMAtomicUoReadPtrT(&pThis->u.s.pDev, struct net_device *); 2277 2271 fRegistered = ASMAtomicUoReadBool(&pThis->u.s.fRegistered); 2278 2272 RTSpinlockReleaseNoInts(pThis->hSpinlock, &Tmp); -
trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
r29662 r30111 777 777 * the one that we will associate this stream with. 778 778 */ 779 ASMAtomicUoWritePtr( (void * volatile *)&pStream->pThis, pThis);779 ASMAtomicUoWritePtr(&pStream->pThis, pThis); 780 780 pStream->Type = g_VBoxNetFltSolarisStreamType; 781 781 switch (pStream->Type) 782 782 { 783 case kIp4Stream: ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pvIp4Stream, pStream); break;784 case kIp6Stream: ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pvIp6Stream, pStream); break;785 case kArpStream: ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pvArpStream, pStream); break;786 case kPromiscStream: ASMAtomicUoWritePtr( (void * volatile *)&pThis->u.s.pvPromiscStream, pStream); break;783 case kIp4Stream: ASMAtomicUoWritePtr(&pThis->u.s.pvIp4Stream, pStream); break; 784 case kIp6Stream: ASMAtomicUoWritePtr(&pThis->u.s.pvIp6Stream, pStream); break; 785 case kArpStream: ASMAtomicUoWritePtr(&pThis->u.s.pvArpStream, pStream); break; 786 case kPromiscStream: ASMAtomicUoWritePtr(&pThis->u.s.pvPromiscStream, pStream); break; 787 787 default: /* Heh. */ 788 788 { … … 924 924 RTTimerStop(pPromiscStream->pIp6Timer); 925 925 RTTimerDestroy(pPromiscStream->pIp6Timer); 926 ASMAtomicUoWritePtr( (void * volatile *)&pPromiscStream->pIp6Timer, NULL);926 ASMAtomicUoWritePtr(&pPromiscStream->pIp6Timer, NULL); 927 927 } 928 928 #endif … … 999 999 { 1000 1000 fSendUpstream = false; 1001 pThis = ASMAtomicUoReadPtr ((void * volatile *)&pStream->pThis);1001 pThis = ASMAtomicUoReadPtrT(&pStream->pThis, PVBOXNETFLTINS); 1002 1002 if (RT_LIKELY(pThis)) 1003 1003 { … … 2476 2476 && RT_LIKELY(pTimer)) 2477 2477 { 2478 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvIp6Stream);2478 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtrT(pThis->u.s.pvIp6Stream, vboxnetflt_stream_t *); 2479 2479 bool fIp6Attaching = ASMAtomicUoReadBool(&pThis->u.s.fAttaching); 2480 2480 if ( !pIp6Stream … … 2512 2512 2513 2513 int rc = VERR_GENERAL_FAILURE; 2514 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvPromiscStream);2514 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvPromiscStream, vboxnetflt_promisc_stream_t *); 2515 2515 if (RT_LIKELY(pPromiscStream)) 2516 2516 { … … 2572 2572 2573 2573 #ifdef VBOXNETFLT_SOLARIS_IPV6_POLLING 2574 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvPromiscStream);2574 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvPromiscStream, vboxnetflt_promisc_stream_t *); 2575 2575 if ( pPromiscStream 2576 2576 && pPromiscStream->pIp6Timer == NULL) … … 2578 2578 RTTimerStop(pPromiscStream->pIp6Timer); 2579 2579 RTTimerDestroy(pPromiscStream->pIp6Timer); 2580 ASMAtomicUoWritePtr( (void * volatile *)&pPromiscStream->pIp6Timer, NULL);2580 ASMAtomicUoWritePtr(&pPromiscStream->pIp6Timer, NULL); 2581 2581 } 2582 2582 #endif … … 3198 3198 Assert(pStream->Type == kPromiscStream); 3199 3199 3200 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvPromiscStream);3200 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvPromiscStream, vboxnetflt_promisc_stream_t *); 3201 3201 if (RT_UNLIKELY(!pPromiscStream)) 3202 3202 { … … 3579 3579 * Enable/disable promiscuous mode. 3580 3580 */ 3581 vboxnetflt_stream_t *pStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvPromiscStream);3581 vboxnetflt_stream_t *pStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvPromiscStream, vboxnetflt_stream_t *); 3582 3582 if (pStream) 3583 3583 { … … 3804 3804 } 3805 3805 #else 3806 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvPromiscStream);3806 vboxnetflt_promisc_stream_t *pPromiscStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvPromiscStream, vboxnetflt_promisc_stream_t *); 3807 3807 if (RT_LIKELY(pPromiscStream)) 3808 3808 { … … 3830 3830 * We either bind to both or neither; so atomic reading one should be sufficient. 3831 3831 */ 3832 vboxnetflt_stream_t *pIp4Stream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvIp4Stream);3832 vboxnetflt_stream_t *pIp4Stream = ASMAtomicUoReadPtrT(&pThis->u.s.pvIp4Stream, vboxnetflt_stream_t *); 3833 3833 if (!pIp4Stream) 3834 3834 return rc; … … 3849 3849 LogFlow((DEVICE_NAME ":vboxNetFltPortOsXmit INTNETTRUNKDIR_HOST ARP\n")); 3850 3850 3851 vboxnetflt_stream_t *pArpStream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvArpStream);3851 vboxnetflt_stream_t *pArpStream = ASMAtomicUoReadPtrT(&pThis->u.s.pvArpStream, vboxnetflt_stream_t *); 3852 3852 if (pArpStream) 3853 3853 { … … 3876 3876 else 3877 3877 { 3878 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtr ((void * volatile *)&pThis->u.s.pvIp6Stream);3878 vboxnetflt_stream_t *pIp6Stream = ASMAtomicUoReadPtrT(&pThis->u.s.pvIp6Stream, vboxnetflt_stream_t *); 3879 3879 if ( pEthHdr->EtherType == RT_H2BE_U16(RTNET_ETHERTYPE_IPV6) 3880 3880 && pIp6Stream) -
trunk/src/VBox/HostDrivers/VBoxNetFlt/win/VBoxNetFlt-win.h
r29643 r30111 202 202 203 203 /** assignes the packet to the packet info */ 204 #define SET_PACKET_TO_INFO(_pPacketInfo, _pPacket) (ASMAtomicUoWritePtr( (void * volatile *)&(_pPacketInfo)->pPacket, (_pPacket)))204 #define SET_PACKET_TO_INFO(_pPacketInfo, _pPacket) (ASMAtomicUoWritePtr(&(_pPacketInfo)->pPacket, (_pPacket))) 205 205 206 206 /** returns the flags the packet info contains */ -
trunk/src/VBox/Main/ConsoleImpl.cpp
r29971 r30111 8088 8088 if (RT_FAILURE(rc)) 8089 8089 pLed = NULL; 8090 ASMAtomic XchgPtr((void * volatile *)&pData->papLeds[iLUN - pData->iFirstLUN], pLed);8090 ASMAtomicWritePtr(&pData->papLeds[iLUN - pData->iFirstLUN], pLed); 8091 8091 Log(("drvStatus_UnitChanged: iLUN=%d pLed=%p\n", iLUN, pLed)); 8092 8092 } … … 8123 8123 unsigned iLed = pData->iLastLUN - pData->iFirstLUN + 1; 8124 8124 while (iLed-- > 0) 8125 ASMAtomic XchgPtr((void * volatile *)&pData->papLeds[iLed], NULL);8125 ASMAtomicWritePtr(&pData->papLeds[iLed], NULL); 8126 8126 } 8127 8127 } -
trunk/src/VBox/Main/VirtualBoxBase.cpp
r28800 r30111 91 91 // one of the locking classes listed at the top of AutoLock.h 92 92 RWLockHandle *objLock = new RWLockHandle(getLockingClass()); 93 if (!ASMAtomicCmpXchgPtr ((void * volatile *)&mObjectLock, objLock, NULL))93 if (!ASMAtomicCmpXchgPtr(&mObjectLock, objLock, NULL)) 94 94 { 95 95 delete objLock; 96 objLock = (RWLockHandle *) ASMAtomicReadPtr ((void * volatile *) &mObjectLock);96 objLock = ASMAtomicReadPtrT(&mObjectLock, RWLockHandle *); 97 97 } 98 98 return objLock; -
trunk/src/VBox/Runtime/common/alloc/memcache.cpp
r28800 r30111 308 308 309 309 /* Make it the hint. */ 310 ASMAtomicWritePtr( (void * volatile *)&pThis->pPageHint, pPage);310 ASMAtomicWritePtr(&pThis->pPageHint, pPage); 311 311 312 312 /* Link the page. */ 313 313 PRTMEMCACHEPAGE pPrevPage = pThis->pPageHead; 314 314 if (!pPrevPage) 315 ASMAtomicWritePtr( (void * volatile *)&pThis->pPageHead, pPage);315 ASMAtomicWritePtr(&pThis->pPageHead, pPage); 316 316 else 317 317 { 318 318 while (pPrevPage->pNext) 319 319 pPrevPage = pPrevPage->pNext; 320 ASMAtomicWritePtr( (void * volatile *)&pPrevPage->pNext, pPage);320 ASMAtomicWritePtr(&pPrevPage->pNext, pPage); 321 321 } 322 322 … … 359 359 * Try grab a free object from the stack. 360 360 */ 361 PRTMEMCACHEFREEOBJ pObj = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);361 PRTMEMCACHEFREEOBJ pObj = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ); 362 362 if (pObj) 363 363 { … … 365 365 do 366 366 { 367 pNext = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pObj->pNext);368 if (ASMAtomicCmpXchgPtr( (void * volatile *)&pThis->pFreeTop, pNext, pObj))367 pNext = ASMAtomicUoReadPtrT(&pObj->pNext, PRTMEMCACHEFREEOBJ); 368 if (ASMAtomicCmpXchgPtr(&pThis->pFreeTop, pNext, pObj)) 369 369 { 370 370 *ppvObj = pObj; 371 371 return VINF_SUCCESS; 372 372 } 373 pObj = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);373 pObj = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ); 374 374 } while (pObj); 375 375 } … … 400 400 * Grab a free object at the page level. 401 401 */ 402 PRTMEMCACHEPAGE pPage = (PRTMEMCACHEPAGE)ASMAtomicReadPtr((void * volatile *)&pThis->pPageHint);402 PRTMEMCACHEPAGE pPage = ASMAtomicReadPtrT(&pThis->pPageHint, PRTMEMCACHEPAGE); 403 403 int32_t iObj = pPage ? rtMemCacheGrabObj(pPage) : -1; 404 404 if (iObj < 0) … … 412 412 { 413 413 if (iObj > 0) 414 ASMAtomicWritePtr( (void * volatile *)&pThis->pPageHint, pPage);414 ASMAtomicWritePtr(&pThis->pPageHint, pPage); 415 415 break; 416 416 } … … 511 511 do 512 512 { 513 pNext = (PRTMEMCACHEFREEOBJ)ASMAtomicUoReadPtr((void * volatile *)&pThis->pFreeTop);513 pNext = ASMAtomicUoReadPtrT(&pThis->pFreeTop, PRTMEMCACHEFREEOBJ); 514 514 pObj->pNext = pNext; 515 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pThis->pFreeTop, pObj, pNext));515 } while (!ASMAtomicCmpXchgPtr(&pThis->pFreeTop, pObj, pNext)); 516 516 } 517 517 else -
trunk/src/VBox/Runtime/common/log/log.cpp
r29263 r30111 1826 1826 RTDECL(PRTLOGGER) RTLogSetDefaultInstance(PRTLOGGER pLogger) 1827 1827 { 1828 return (PRTLOGGER)ASMAtomicXchgPtr((void * volatile *)&g_pLogger, pLogger);1828 return ASMAtomicXchgPtrT(&g_pLogger, pLogger, PRTLOGGER); 1829 1829 } 1830 1830 RT_EXPORT_SYMBOL(RTLogSetDefaultInstance); … … 1861 1861 if (g_aPerThreadLoggers[i].NativeThread == Self) 1862 1862 { 1863 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey);1863 ASMAtomicWritePtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey); 1864 1864 g_aPerThreadLoggers[i].pLogger = pLogger; 1865 1865 return VINF_SUCCESS; … … 1885 1885 && ASMAtomicCmpXchgPtr((void * volatile *)&g_aPerThreadLoggers[i].NativeThread, (void *)Self, (void *)NIL_RTNATIVETHREAD)) 1886 1886 { 1887 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey);1888 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].pLogger, pLogger);1887 ASMAtomicWritePtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey); 1888 ASMAtomicWritePtr(&g_aPerThreadLoggers[i].pLogger, pLogger); 1889 1889 return VINF_SUCCESS; 1890 1890 } … … 1905 1905 || g_aPerThreadLoggers[i].uKey == uKey) 1906 1906 { 1907 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].uKey,NULL);1908 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].pLogger,NULL);1909 ASMAtomic XchgPtr((void * volatile *)&g_aPerThreadLoggers[i].NativeThread, (void *)NIL_RTNATIVETHREAD);1907 ASMAtomicWritePtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)NULL); 1908 ASMAtomicWritePtr(&g_aPerThreadLoggers[i].pLogger, (PRTLOGGER)NULL); 1909 ASMAtomicWriteHandle(&g_aPerThreadLoggers[i].NativeThread, NIL_RTNATIVETHREAD); 1910 1910 ASMAtomicDecS32(&g_cPerThreadLoggers); 1911 1911 } -
trunk/src/VBox/Runtime/common/log/logrel.cpp
r28800 r30111 96 96 RTDECL(PRTLOGGER) RTLogRelSetDefaultInstance(PRTLOGGER pLogger) 97 97 { 98 return (PRTLOGGER)ASMAtomicXchgPtr((void * volatile *)&g_pRelLogger, pLogger);98 return ASMAtomicXchgPtrT(&g_pRelLogger, pLogger, PRTLOGGER); 99 99 } 100 100 RT_EXPORT_SYMBOL(RTLogRelSetDefaultInstance); -
trunk/src/VBox/Runtime/common/misc/assert.cpp
r28800 r30111 107 107 * Fill in the globals. 108 108 */ 109 ASMAtomicUoWritePtr( (void * volatile *)&g_pszRTAssertExpr, (void *)pszExpr);110 ASMAtomicUoWritePtr( (void * volatile *)&g_pszRTAssertFile, (void *)pszFile);111 ASMAtomicUoWritePtr( (void * volatile *)&g_pszRTAssertFunction, (void *)pszFunction);109 ASMAtomicUoWritePtr(&g_pszRTAssertExpr, pszExpr); 110 ASMAtomicUoWritePtr(&g_pszRTAssertFile, pszFile); 111 ASMAtomicUoWritePtr(&g_pszRTAssertFunction, pszFunction); 112 112 ASMAtomicUoWriteU32(&g_u32RTAssertLine, uLine); 113 113 RTStrPrintf(g_szRTAssertMsg1, sizeof(g_szRTAssertMsg1), -
trunk/src/VBox/Runtime/common/misc/lockvalidator.cpp
r28800 r30111 341 341 DECL_FORCE_INLINE(PRTLOCKVALRECUNION) rtLockValidatorReadRecUnionPtr(PRTLOCKVALRECUNION volatile *ppRec) 342 342 { 343 PRTLOCKVALRECUNION p = (PRTLOCKVALRECUNION)ASMAtomicReadPtr((void * volatile *)ppRec);343 PRTLOCKVALRECUNION p = ASMAtomicReadPtrT(ppRec, PRTLOCKVALRECUNION); 344 344 RTLOCKVAL_ASSERT_PTR_ALIGN(p); 345 345 return p; … … 351 351 { 352 352 RTLOCKVAL_ASSERT_PTR_ALIGN(pRecNew); 353 ASMAtomicWritePtr( (void * volatile *)ppRec, pRecNew);353 ASMAtomicWritePtr(ppRec, pRecNew); 354 354 } 355 355 … … 358 358 DECL_FORCE_INLINE(PRTTHREADINT) rtLockValidatorReadThreadHandle(RTTHREAD volatile *phThread) 359 359 { 360 PRTTHREADINT p = (PRTTHREADINT)ASMAtomicReadPtr((void * volatile *)phThread);360 PRTTHREADINT p = ASMAtomicReadPtrT(phThread, PRTTHREADINT); 361 361 RTLOCKVAL_ASSERT_PTR_ALIGN(p); 362 362 return p; … … 367 367 DECL_FORCE_INLINE(PRTLOCKVALRECSHRDOWN) rtLockValidatorUoReadSharedOwner(PRTLOCKVALRECSHRDOWN volatile *ppOwner) 368 368 { 369 PRTLOCKVALRECSHRDOWN p = (PRTLOCKVALRECSHRDOWN)ASMAtomicUoReadPtr((void * volatile *)ppOwner);369 PRTLOCKVALRECSHRDOWN p = ASMAtomicUoReadPtrT(ppOwner, PRTLOCKVALRECSHRDOWN); 370 370 RTLOCKVAL_ASSERT_PTR_ALIGN(p); 371 371 return p; … … 819 819 if (pSrc) 820 820 { 821 ASMAtomicUoWriteU32(&pDst->uLine, 822 ASMAtomicUoWritePtr( (void * volatile *)&pDst->pszFile, pSrc->pszFile);823 ASMAtomicUoWritePtr( (void * volatile *)&pDst->pszFunction, pSrc->pszFunction);824 ASMAtomicUoWritePtr((void * volatile *)&pDst->uId, 821 ASMAtomicUoWriteU32(&pDst->uLine, pSrc->uLine); 822 ASMAtomicUoWritePtr(&pDst->pszFile, pSrc->pszFile); 823 ASMAtomicUoWritePtr(&pDst->pszFunction, pSrc->pszFunction); 824 ASMAtomicUoWritePtr((void * volatile *)&pDst->uId, (void *)pSrc->uId); 825 825 } 826 826 else 827 827 { 828 ASMAtomicUoWriteU32(&pDst->uLine, 829 ASMAtomicUoWritePtr( (void * volatile *)&pDst->pszFile, NULL);830 ASMAtomicUoWritePtr( (void * volatile *)&pDst->pszFunction, NULL);831 ASMAtomicUoWritePtr( (void * volatile *)&pDst->uId,0);828 ASMAtomicUoWriteU32(&pDst->uLine, 0); 829 ASMAtomicUoWritePtr(&pDst->pszFile, NULL); 830 ASMAtomicUoWritePtr(&pDst->pszFunction, NULL); 831 ASMAtomicUoWritePtr(&pDst->uId, (RTHCUINTPTR)0); 832 832 } 833 833 } … … 1359 1359 if ( !(*ppHashEntry) 1360 1360 || (*ppHashEntry)->cLookups + 128 < cLookups) 1361 ASMAtomicWritePtr( (void * volatile *)ppHashEntry, &pChunk->aRefs[i]);1361 ASMAtomicWritePtr(ppHashEntry, &pChunk->aRefs[i]); 1362 1362 1363 1363 #ifdef RTLOCKVAL_WITH_CLASS_HASH_STATS … … 1469 1469 pNew->aRefs[0].fAutodidacticism = fAutodidacticism; 1470 1470 1471 ASMAtomicWritePtr( (void * volatile *)&pChunk->pNext, pNew);1471 ASMAtomicWritePtr(&pChunk->pNext, pNew); 1472 1472 rtLockValidatorClassRetain(pPriorClass); 1473 1473 rc = VINF_SUCCESS; … … 1547 1547 if (RT_UNLIKELY(ppCoreNext)) 1548 1548 break; 1549 pSibling = (PRTLOCKVALRECUNION)ASMAtomicXchgPtr((void * volatile *)ppCoreNext, NULL);1549 pSibling = ASMAtomicXchgPtrT(ppCoreNext, NULL, PRTLOCKVALRECUNION); 1550 1550 } 1551 1551 } … … 3472 3472 { 3473 3473 PRTLOCKVALRECSHRDOWN volatile *papOwners = pRec->papOwners; 3474 ASMAtomicUoWritePtr( (void * volatile *)&pRec->papOwners, NULL);3474 ASMAtomicUoWritePtr(&pRec->papOwners, NULL); 3475 3475 ASMAtomicUoWriteU32(&pRec->cAllocated, 0); 3476 3476 … … 3815 3815 } 3816 3816 3817 ASMAtomicWritePtr( (void * volatile *)&pShared->papOwners, papOwners);3817 ASMAtomicWritePtr(&pShared->papOwners, papOwners); 3818 3818 ASMAtomicWriteU32(&pShared->cAllocated, cAllocated); 3819 3819 } … … 3858 3858 for (uint32_t iEntry = 0; iEntry < cMax; iEntry++) 3859 3859 { 3860 if (ASMAtomicCmpXchgPtr( (void * volatile *)&papOwners[iEntry], pEntry, NULL))3860 if (ASMAtomicCmpXchgPtr(&papOwners[iEntry], pEntry, NULL)) 3861 3861 { 3862 3862 rtLockValidatorSerializeDetectionLeave(); … … 3889 3889 AssertReturnVoidStmt(pShared->Core.u32Magic == RTLOCKVALRECSHRD_MAGIC, rtLockValidatorSerializeDetectionLeave()); 3890 3890 if (RT_UNLIKELY( iEntry >= pShared->cAllocated 3891 || !ASMAtomicCmpXchgPtr( (void * volatile *)&pShared->papOwners[iEntry], NULL, pEntry)))3891 || !ASMAtomicCmpXchgPtr(&pShared->papOwners[iEntry], NULL, pEntry))) 3892 3892 { 3893 3893 /* this shouldn't happen yet... */ … … 3896 3896 uint32_t const cMax = pShared->cAllocated; 3897 3897 for (iEntry = 0; iEntry < cMax; iEntry++) 3898 if (ASMAtomicCmpXchgPtr( (void * volatile *)&papOwners[iEntry], NULL, pEntry))3898 if (ASMAtomicCmpXchgPtr(&papOwners[iEntry], NULL, pEntry)) 3899 3899 break; 3900 3900 AssertReturnVoidStmt(iEntry < cMax, rtLockValidatorSerializeDetectionLeave()); … … 3931 3931 while (iEntry < cEntries) 3932 3932 { 3933 PRTLOCKVALRECSHRDOWN pEntry = (PRTLOCKVALRECSHRDOWN)ASMAtomicXchgPtr((void * volatile *)&papEntries[iEntry], NULL);3933 PRTLOCKVALRECSHRDOWN pEntry = ASMAtomicXchgPtrT(&papEntries[iEntry], NULL, PRTLOCKVALRECSHRDOWN); 3934 3934 if (pEntry) 3935 3935 { -
trunk/src/VBox/Runtime/common/misc/req.cpp
r28800 r30111 129 129 * Get pending requests. 130 130 */ 131 PRTREQ pReqs = (PRTREQ)ASMAtomicXchgPtr((void * volatile *)&pQueue->pReqs, NULL);131 PRTREQ pReqs = ASMAtomicXchgPtrT(&pQueue->pReqs, NULL, PRTREQ); 132 132 if (!pReqs) 133 133 { … … 393 393 for (unsigned cIterations = 0;; cIterations++) 394 394 { 395 PRTREQ pHead = (PRTREQ)ASMAtomicXchgPtr((void * volatile *)ppHead, pList);395 PRTREQ pHead = ASMAtomicXchgPtrT(ppHead, pList, PRTREQ); 396 396 if (!pHead) 397 397 return; … … 400 400 pTail = pTail->pNext; 401 401 pTail->pNext = pList; 402 if (ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pHead, pList))402 if (ASMAtomicCmpXchgPtr(ppHead, pHead, pList)) 403 403 return; 404 404 pTail->pNext = NULL; 405 if (ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pHead, NULL))405 if (ASMAtomicCmpXchgPtr(ppHead, pHead, NULL)) 406 406 return; 407 407 pList = pHead; … … 478 478 PRTREQ pReq = *ppHead; 479 479 if ( pReq 480 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (pNext = pReq->pNext), pReq)480 && !ASMAtomicCmpXchgPtr(ppHead, (pNext = pReq->pNext), pReq) 481 481 && (pReq = *ppHead) 482 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (pNext = pReq->pNext), pReq))482 && !ASMAtomicCmpXchgPtr(ppHead, (pNext = pReq->pNext), pReq)) 483 483 pReq = NULL; 484 484 if (pReq) … … 486 486 Assert(pReq->pNext == pNext); NOREF(pReq); 487 487 #else 488 PRTREQ pReq = (PRTREQ)ASMAtomicXchgPtr((void * volatile *)ppHead, NULL);488 PRTREQ pReq = ASMAtomicXchgPtrT(ppHead, NULL, PRTREQ); 489 489 if (pReq) 490 490 { 491 491 PRTREQ pNext = pReq->pNext; 492 492 if ( pNext 493 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, pNext, NULL))493 && !ASMAtomicCmpXchgPtr(ppHead, pNext, NULL)) 494 494 { 495 495 vmr3ReqJoinFree(pQueue, pReq->pNext); … … 621 621 { 622 622 pNext = *ppHead; 623 ASMAtomic XchgPtr((void * volatile *)&pReq->pNext, pNext);624 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pReq, (void *)pNext));623 ASMAtomicWritePtr(&pReq->pNext, pNext); 624 } while (!ASMAtomicCmpXchgPtr(ppHead, pReq, pNext)); 625 625 } 626 626 else … … 691 691 pReq->pNext = pNext; 692 692 ASMAtomicWriteBool(&pQueue->fBusy, true); 693 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pQueue->pReqs, (void *)pReq, (void *)pNext));693 } while (!ASMAtomicCmpXchgPtr(&pQueue->pReqs, pReq, pNext)); 694 694 695 695 /* … … 931 931 if (ASMAtomicReadBool(&pQueue->fBusy)) 932 932 return true; 933 if (ASMAtomicReadPtr ((void * volatile *)&pQueue->pReqs) != NULL)933 if (ASMAtomicReadPtrT(&pQueue->pReqs, PRTREQ) != NULL) 934 934 return true; 935 935 if (ASMAtomicReadBool(&pQueue->fBusy)) -
trunk/src/VBox/Runtime/common/misc/thread.cpp
r28903 r30111 1349 1349 if ( pThread->LockValidator.pRec 1350 1350 && pThread->LockValidator.enmRecState == enmCurState) 1351 ASMAtomicWritePtr( (void * volatile *)&pThread->LockValidator.pRec, NULL);1351 ASMAtomicWritePtr(&pThread->LockValidator.pRec, NULL); 1352 1352 } 1353 1353 /* This is a bit ugly... :-/ */ … … 1355 1355 || enmActualState == RTTHREADSTATE_INITIALIZING) 1356 1356 && pThread->LockValidator.pRec) 1357 ASMAtomicWritePtr( (void * volatile *)&pThread->LockValidator.pRec, NULL);1357 ASMAtomicWritePtr(&pThread->LockValidator.pRec, NULL); 1358 1358 Assert( pThread->LockValidator.pRec == NULL 1359 1359 || RTTHREAD_IS_SLEEPING(enmActualState)); -
trunk/src/VBox/Runtime/generic/tls-generic.cpp
r28800 r30111 89 89 return VERR_INVALID_PARAMETER; 90 90 91 ASMAtomicWritePtr( (void * volatile *)&g_apfnDestructors[iTls], NULL);91 ASMAtomicWritePtr(&g_apfnDestructors[iTls], NULL); 92 92 rtThreadClearTlsEntry(iTls); 93 93 ASMAtomicBitClear(&g_au32AllocatedBitmap[0], iTls); -
trunk/src/VBox/Runtime/r3/darwin/sched-darwin.cpp
r28800 r30111 270 270 } 271 271 Assert(pProcessPriority != &g_aDefaultPriority); 272 ASMAtomicUoWritePtr( (void **)&g_pProcessPriority, pProcessPriority);272 ASMAtomicUoWritePtr(&g_pProcessPriority, pProcessPriority); 273 273 274 274 return VINF_SUCCESS; -
trunk/src/VBox/Runtime/r3/posix/fileaio-posix.cpp
r29477 r30111 198 198 for (unsigned iSlot = 0; iSlot < RT_ELEMENTS(pCtxInt->apReqsNewHead); iSlot++) 199 199 { 200 PRTFILEAIOREQINTERNAL pReqHead = (PRTFILEAIOREQINTERNAL)ASMAtomicXchgPtr((void* volatile*)&pCtxInt->apReqsNewHead[iSlot], 201 NULL); 200 PRTFILEAIOREQINTERNAL pReqHead = ASMAtomicXchgPtrT(&pCtxInt->apReqsNewHead[iSlot], NULL, PRTFILEAIOREQINTERNAL); 202 201 203 202 while ( (pCtxInt->iFirstFree < pCtxInt->cReqsWaitMax) … … 249 248 250 249 /* Check if a request needs to be canceled. */ 251 PRTFILEAIOREQINTERNAL pReqToCancel = (PRTFILEAIOREQINTERNAL)ASMAtomicReadPtr((void* volatile*)&pCtxInt->pReqToCancel);250 PRTFILEAIOREQINTERNAL pReqToCancel = ASMAtomicReadPtrT(&pCtxInt->pReqToCancel, PRTFILEAIOREQINTERNAL); 252 251 if (pReqToCancel) 253 252 { … … 487 486 488 487 Assert(!pCtxInt->pReqToCancel); 489 ASMAtomicWritePtr( (void* volatile*)&pCtxInt->pReqToCancel, pReqInt);488 ASMAtomicWritePtr(&pCtxInt->pReqToCancel, pReqInt); 490 489 rtFileAioCtxWakeup(pCtxInt); 491 490 … … 494 493 AssertRC(rc); 495 494 496 ASMAtomicWritePtr( (void* volatile*)&pCtxInt->pReqToCancel, NULL);495 ASMAtomicWritePtr(&pCtxInt->pReqToCancel, NULL); 497 496 pReqInt->Rc = VERR_FILE_AIO_CANCELED; 498 497 RTFILEAIOREQ_SET_STATE(pReqInt, COMPLETED); … … 819 818 unsigned iSlot = 0; 820 819 while ( (iSlot < RT_ELEMENTS(pCtxInt->apReqsNewHead)) 821 && !ASMAtomicCmpXchgPtr( (void * volatile *)&pCtxInt->apReqsNewHead[iSlot], pHead, NULL))820 && !ASMAtomicCmpXchgPtr(&pCtxInt->apReqsNewHead[iSlot], pHead, NULL)) 822 821 iSlot++; 823 822 … … 825 824 { 826 825 /* Nothing found. */ 827 PRTFILEAIOREQINTERNAL pOldHead = (PRTFILEAIOREQINTERNAL)ASMAtomicXchgPtr((void * volatile *)&pCtxInt->apReqsNewHead[0], 828 NULL); 826 PRTFILEAIOREQINTERNAL pOldHead = ASMAtomicXchgPtrT(&pCtxInt->apReqsNewHead[0], NULL, PRTFILEAIOREQINTERNAL); 829 827 830 828 /* Find the end of the current head and link the old list to the current. */ … … 835 833 pTail->pNext = pOldHead; 836 834 837 ASMAtomic XchgPtr((void * volatile *)&pCtxInt->apReqsNewHead[0], pHead);835 ASMAtomicWritePtr(&pCtxInt->apReqsNewHead[0], pHead); 838 836 } 839 837 -
trunk/src/VBox/Runtime/r3/posix/semrw-posix.cpp
r28800 r30111 52 52 /** @todo move this to r3/posix/something.h. */ 53 53 #ifdef RT_OS_SOLARIS 54 # define ATOMIC_GET_PTHREAD_T(p vVar, pThread) ASMAtomicReadSize(pvVar, pThread)55 # define ATOMIC_SET_PTHREAD_T(p vVar, pThread) ASMAtomicWriteSize(pvVar, pThread)54 # define ATOMIC_GET_PTHREAD_T(ppvVar, pThread) ASMAtomicReadSize(ppvVar, pThread) 55 # define ATOMIC_SET_PTHREAD_T(ppvVar, pThread) ASMAtomicWriteSize(ppvVar, pThread) 56 56 #else 57 57 AssertCompileSize(pthread_t, sizeof(void *)); 58 # define ATOMIC_GET_PTHREAD_T(p vVar, pThread) do { *(pThread) = (pthread_t)ASMAtomicReadPtr((void *volatile *)pvVar); } while (0)59 # define ATOMIC_SET_PTHREAD_T(p vVar, pThread) ASMAtomicWritePtr((void *volatile *)pvVar, (void *)pThread)58 # define ATOMIC_GET_PTHREAD_T(ppvVar, pThread) do { *(pThread) = (pthread_t)ASMAtomicReadPtr((void * volatile *)ppvVar); } while (0) 59 # define ATOMIC_SET_PTHREAD_T(ppvVar, pThread) ASMAtomicWritePtr((void * volatile *)ppvVar, (void *)pThread) 60 60 #endif 61 61 -
trunk/src/VBox/Runtime/r3/stream.cpp
r28800 r30111 143 143 if (RT_SUCCESS(rc)) 144 144 { 145 if (RT_LIKELY(ASMAtomicCmpXchgPtr( (void * volatile *)&pStream->pCritSect, pCritSect, NULL)))145 if (RT_LIKELY(ASMAtomicCmpXchgPtr(&pStream->pCritSect, pCritSect, NULL))) 146 146 return VINF_SUCCESS; 147 147 … … 153 153 154 154 /* Handle the lost race case... */ 155 pCritSect = (PRTCRITSECT)ASMAtomicReadPtr((void * volatile *)&pStream->pCritSect);155 pCritSect = ASMAtomicReadPtrT(&pStream->pCritSect, PRTCRITSECT); 156 156 if (pCritSect) 157 157 return RTCritSectEnter(pCritSect); -
trunk/src/VBox/Runtime/r3/win/semmutex-win.cpp
r28800 r30111 138 138 AssertReturn(ASMAtomicCmpXchgU32(&pThis->u32Magic, RTSEMMUTEX_MAGIC_DEAD, RTSEMMUTEX_MAGIC), VERR_INVALID_HANDLE); 139 139 HANDLE hMtx = pThis->hMtx; 140 ASMAtomicWritePtr( (void * volatile *)&pThis->hMtx, (void *)INVALID_HANDLE_VALUE);140 ASMAtomicWritePtr(&pThis->hMtx, INVALID_HANDLE_VALUE); 141 141 142 142 int rc = VINF_SUCCESS; -
trunk/src/VBox/VMM/PDMAsyncCompletionFile.cpp
r29587 r30111 120 120 * Get pending tasks. 121 121 */ 122 pTasks = (PPDMACTASKFILE)ASMAtomicXchgPtr((void * volatile *)&pEndpoint->pTasksNewHead, NULL);122 pTasks = ASMAtomicXchgPtrT(&pEndpoint->pTasksNewHead, NULL, PPDMACTASKFILE); 123 123 124 124 /* Reverse the list to process in FIFO order. */ … … 185 185 AssertRCReturn(rc, rc); 186 186 187 ASMAtomicWritePtr( (void * volatile *)&pAioMgr->BlockingEventData.AddEndpoint.pEndpoint, pEndpoint);187 ASMAtomicWritePtr(&pAioMgr->BlockingEventData.AddEndpoint.pEndpoint, pEndpoint); 188 188 rc = pdmacFileAioMgrWaitForBlockingEvent(pAioMgr, PDMACEPFILEAIOMGRBLOCKINGEVENT_ADD_ENDPOINT); 189 189 … … 191 191 192 192 if (RT_SUCCESS(rc)) 193 ASMAtomicWritePtr( (void * volatile *)&pEndpoint->pAioMgr, pAioMgr);193 ASMAtomicWritePtr(&pEndpoint->pAioMgr, pAioMgr); 194 194 195 195 return rc; … … 203 203 AssertRCReturn(rc, rc); 204 204 205 ASMAtomicWritePtr( (void * volatile *)&pAioMgr->BlockingEventData.RemoveEndpoint.pEndpoint, pEndpoint);205 ASMAtomicWritePtr(&pAioMgr->BlockingEventData.RemoveEndpoint.pEndpoint, pEndpoint); 206 206 rc = pdmacFileAioMgrWaitForBlockingEvent(pAioMgr, PDMACEPFILEAIOMGRBLOCKINGEVENT_REMOVE_ENDPOINT); 207 207 … … 218 218 AssertRCReturn(rc, rc); 219 219 220 ASMAtomicWritePtr( (void * volatile *)&pAioMgr->BlockingEventData.CloseEndpoint.pEndpoint, pEndpoint);220 ASMAtomicWritePtr(&pAioMgr->BlockingEventData.CloseEndpoint.pEndpoint, pEndpoint); 221 221 rc = pdmacFileAioMgrWaitForBlockingEvent(pAioMgr, PDMACEPFILEAIOMGRBLOCKINGEVENT_CLOSE_ENDPOINT); 222 222 … … 247 247 pNext = pEndpoint->pTasksNewHead; 248 248 pTask->pNext = pNext; 249 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pEndpoint->pTasksNewHead, (void *)pTask, (void *)pNext));250 251 pdmacFileAioMgrWakeup( (PPDMACEPFILEMGR)ASMAtomicReadPtr((void * volatile *)&pEndpoint->pAioMgr));249 } while (!ASMAtomicCmpXchgPtr(&pEndpoint->pTasksNewHead, pTask, pNext)); 250 251 pdmacFileAioMgrWakeup(ASMAtomicReadPtrT(&pEndpoint->pAioMgr, PPDMACEPFILEMGR)); 252 252 253 253 return VINF_SUCCESS; -
trunk/src/VBox/VMM/PDMAsyncCompletionFileNormal.cpp
r29474 r30111 1194 1194 case PDMACEPFILEAIOMGRBLOCKINGEVENT_ADD_ENDPOINT: 1195 1195 { 1196 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointNew = (PPDMASYNCCOMPLETIONENDPOINTFILE)ASMAtomicReadPtr((void * volatile *)&pAioMgr->BlockingEventData.AddEndpoint.pEndpoint);1196 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointNew = ASMAtomicReadPtrT(&pAioMgr->BlockingEventData.AddEndpoint.pEndpoint, PPDMASYNCCOMPLETIONENDPOINTFILE); 1197 1197 AssertMsg(VALID_PTR(pEndpointNew), ("Adding endpoint event without a endpoint to add\n")); 1198 1198 … … 1213 1213 case PDMACEPFILEAIOMGRBLOCKINGEVENT_REMOVE_ENDPOINT: 1214 1214 { 1215 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointRemove = (PPDMASYNCCOMPLETIONENDPOINTFILE)ASMAtomicReadPtr((void * volatile *)&pAioMgr->BlockingEventData.RemoveEndpoint.pEndpoint);1215 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointRemove = ASMAtomicReadPtrT(&pAioMgr->BlockingEventData.RemoveEndpoint.pEndpoint, PPDMASYNCCOMPLETIONENDPOINTFILE); 1216 1216 AssertMsg(VALID_PTR(pEndpointRemove), ("Removing endpoint event without a endpoint to remove\n")); 1217 1217 … … 1222 1222 case PDMACEPFILEAIOMGRBLOCKINGEVENT_CLOSE_ENDPOINT: 1223 1223 { 1224 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointClose = (PPDMASYNCCOMPLETIONENDPOINTFILE)ASMAtomicReadPtr((void * volatile *)&pAioMgr->BlockingEventData.CloseEndpoint.pEndpoint);1224 PPDMASYNCCOMPLETIONENDPOINTFILE pEndpointClose = ASMAtomicReadPtrT(&pAioMgr->BlockingEventData.CloseEndpoint.pEndpoint, PPDMASYNCCOMPLETIONENDPOINTFILE); 1225 1225 AssertMsg(VALID_PTR(pEndpointClose), ("Close endpoint event without a endpoint to close\n")); 1226 1226 -
trunk/src/VBox/VMM/PDMQueue.cpp
r29910 r30111 710 710 * Get the lists. 711 711 */ 712 PPDMQUEUEITEMCORE pItems = (PPDMQUEUEITEMCORE)ASMAtomicXchgPtr((void * volatile *)&pQueue->pPendingR3, NULL);712 PPDMQUEUEITEMCORE pItems = ASMAtomicXchgPtrT(&pQueue->pPendingR3, NULL, PPDMQUEUEITEMCORE); 713 713 RTRCPTR pItemsRC = ASMAtomicXchgRCPtr(&pQueue->pPendingRC, NIL_RTRCPTR); 714 714 RTR0PTR pItemsR0 = ASMAtomicXchgR0Ptr(&pQueue->pPendingR0, NIL_RTR0PTR); … … 835 835 for (;;) 836 836 { 837 if (ASMAtomicCmpXchgPtr( (void * volatile *)&pQueue->pPendingR3, pItems, NULL))837 if (ASMAtomicCmpXchgPtr(&pQueue->pPendingR3, pItems, NULL)) 838 838 break; 839 PPDMQUEUEITEMCORE pPending = (PPDMQUEUEITEMCORE)ASMAtomicXchgPtr((void * volatile *)&pQueue->pPendingR3, NULL);839 PPDMQUEUEITEMCORE pPending = ASMAtomicXchgPtrT(&pQueue->pPendingR3, NULL, PPDMQUEUEITEMCORE); 840 840 if (pPending) 841 841 { -
trunk/src/VBox/VMM/SSM.cpp
r29954 r30111 1899 1899 for (;;) 1900 1900 { 1901 PSSMSTRMBUF pCurFreeHead = (PSSMSTRMBUF)ASMAtomicUoReadPtr((void * volatile *)&pStrm->pFree);1902 ASMAtomicUoWritePtr( (void * volatile *)&pBuf->pNext, pCurFreeHead);1903 if (ASMAtomicCmpXchgPtr( (void * volatile *)&pStrm->pFree, pBuf, pCurFreeHead))1901 PSSMSTRMBUF pCurFreeHead = ASMAtomicUoReadPtrT(&pStrm->pFree, PSSMSTRMBUF); 1902 ASMAtomicUoWritePtr(&pBuf->pNext, pCurFreeHead); 1903 if (ASMAtomicCmpXchgPtr(&pStrm->pFree, pBuf, pCurFreeHead)) 1904 1904 { 1905 1905 int rc = RTSemEventSignal(pStrm->hEvtFree); … … 1923 1923 for (;;) 1924 1924 { 1925 PSSMSTRMBUF pMine = (PSSMSTRMBUF)ASMAtomicUoReadPtr((void * volatile *)&pStrm->pFree);1925 PSSMSTRMBUF pMine = ASMAtomicUoReadPtrT(&pStrm->pFree, PSSMSTRMBUF); 1926 1926 if (!pMine) 1927 1927 { … … 1944 1944 } 1945 1945 1946 if (ASMAtomicCmpXchgPtr( (void * volatile *)&pStrm->pFree, pMine->pNext, pMine))1946 if (ASMAtomicCmpXchgPtr(&pStrm->pFree, pMine->pNext, pMine)) 1947 1947 { 1948 1948 pMine->offStream = UINT64_MAX; … … 1968 1968 for (;;) 1969 1969 { 1970 PSSMSTRMBUF pCurHead = (PSSMSTRMBUF)ASMAtomicUoReadPtr((void * volatile *)&pStrm->pHead);1971 ASMAtomicUoWritePtr( (void * volatile *)&pBuf->pNext, pCurHead);1972 if (ASMAtomicCmpXchgPtr( (void * volatile *)&pStrm->pHead, pBuf, pCurHead))1970 PSSMSTRMBUF pCurHead = ASMAtomicUoReadPtrT(&pStrm->pHead, PSSMSTRMBUF); 1971 ASMAtomicUoWritePtr(&pBuf->pNext, pCurHead); 1972 if (ASMAtomicCmpXchgPtr(&pStrm->pHead, pBuf, pCurHead)) 1973 1973 { 1974 1974 int rc = RTSemEventSignal(pStrm->hEvtHead); … … 2021 2021 } 2022 2022 2023 pMine = (PSSMSTRMBUF)ASMAtomicXchgPtr((void * volatile *)&pStrm->pHead, NULL);2023 pMine = ASMAtomicXchgPtrT(&pStrm->pHead, NULL, PSSMSTRMBUF); 2024 2024 if (pMine) 2025 2025 pStrm->pPending = ssmR3StrmReverseList(pMine); … … 2117 2117 * Grab the pending list and write it out. 2118 2118 */ 2119 PSSMSTRMBUF pHead = (PSSMSTRMBUF)ASMAtomicXchgPtr((void * volatile *)&pStrm->pHead, NULL);2119 PSSMSTRMBUF pHead = ASMAtomicXchgPtrT(&pStrm->pHead, NULL, PSSMSTRMBUF); 2120 2120 if (!pHead) 2121 2121 return VINF_SUCCESS; … … 2823 2823 if (ASMAtomicReadBool(&pStrm->fTerminating)) 2824 2824 { 2825 if (!ASMAtomicReadPtr ((void * volatile *)&pStrm->pHead))2825 if (!ASMAtomicReadPtrT(&pStrm->pHead, PSSMSTRMBUF)) 2826 2826 { 2827 2827 Log(("ssmR3StrmIoThread: quitting writing because of pending termination.\n")); … … 2830 2830 Log(("ssmR3StrmIoThread: postponing termination because of pending buffers.\n")); 2831 2831 } 2832 else if (!ASMAtomicReadPtr ((void * volatile *)&pStrm->pHead))2832 else if (!ASMAtomicReadPtrT(&pStrm->pHead, PSSMSTRMBUF)) 2833 2833 { 2834 2834 rc = RTSemEventWait(pStrm->hEvtHead, RT_INDEFINITE_WAIT); -
trunk/src/VBox/VMM/VM.cpp
r29329 r30111 2424 2424 for (unsigned i = 0; i < 10; i++) 2425 2425 { 2426 PVMREQ pReqHead = (PVMREQ)ASMAtomicXchgPtr((void * volatile *)&pUVM->vm.s.pReqs, NULL);2426 PVMREQ pReqHead = ASMAtomicXchgPtrT(&pUVM->vm.s.pReqs, NULL, PVMREQ); 2427 2427 AssertMsg(!pReqHead, ("This isn't supposed to happen! VMR3Destroy caller has to serialize this.\n")); 2428 2428 if (!pReqHead) … … 2449 2449 for (unsigned i = 0; i < 10; i++) 2450 2450 { 2451 PVMREQ pReqHead = (PVMREQ)ASMAtomicXchgPtr((void * volatile *)&pUVCpu->vm.s.pReqs, NULL);2451 PVMREQ pReqHead = ASMAtomicXchgPtrT(&pUVCpu->vm.s.pReqs, NULL, PVMREQ); 2452 2452 AssertMsg(!pReqHead, ("This isn't supposed to happen! VMR3Destroy caller has to serialize this.\n")); 2453 2453 if (!pReqHead) -
trunk/src/VBox/VMM/VMMAll/PDMAllQueue.cpp
r29902 r30111 85 85 pvNext = ASMAtomicUoReadPtr((void * volatile *)&pQueue->CTX_SUFF(pPending)); 86 86 ASMAtomicUoWritePtr((void * volatile *)&pItem->CTX_SUFF(pNext), pvNext); 87 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pQueue->CTX_SUFF(pPending), pItem, pvNext));87 } while (!ASMAtomicCmpXchgPtr(&pQueue->CTX_SUFF(pPending), pItem, pvNext)); 88 88 #else 89 89 PPDMQUEUEITEMCORE pNext; … … 92 92 pNext = pQueue->CTX_SUFF(pPending); 93 93 pItem->CTX_SUFF(pNext) = pNext; 94 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pQueue->CTX_SUFF(pPending), pItem, pNext));94 } while (!ASMAtomicCmpXchgPtr(&pQueue->CTX_SUFF(pPending), pItem, pNext)); 95 95 #endif 96 96 -
trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
r29250 r30111 1067 1067 pHandle->iNext = pGVMM->iFreeHead; 1068 1068 pGVMM->iFreeHead = iHandle; 1069 ASMAtomic XchgPtr((void * volatile *)&pHandle->pGVM,NULL);1070 ASMAtomic XchgPtr((void * volatile *)&pHandle->pVM,NULL);1071 ASMAtomic XchgPtr((void * volatile *)&pHandle->pvObj,NULL);1072 ASMAtomic XchgPtr((void * volatile *)&pHandle->pSession,NULL);1073 ASMAtomic XchgSize(&pHandle->hEMT0,NIL_RTNATIVETHREAD);1074 ASMAtomic XchgSize(&pHandle->ProcId,NIL_RTPROCESS);1069 ASMAtomicWritePtr(&pHandle->pGVM, (PGVM)NULL); 1070 ASMAtomicWritePtr(&pHandle->pVM, (PVM)NULL); 1071 ASMAtomicWritePtr(&pHandle->pvObj, (void *)NULL); 1072 ASMAtomicWritePtr(&pHandle->pSession, (PSUPDRVSESSION)NULL); 1073 ASMAtomicWriteSize(&pHandle->hEMT0, NIL_RTNATIVETHREAD); 1074 ASMAtomicWriteSize(&pHandle->ProcId, NIL_RTPROCESS); 1075 1075 1076 1076 gvmmR0UsedUnlock(pGVMM); -
trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
r29468 r30111 198 198 * @param pvFault The fault address. 199 199 */ 200 VMMR0DECL(int) PGMR0Trap0eHandlerNestedPaging(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPHYS pvFault) 200 VMMR0DECL(int) PGMR0Trap0eHandlerNestedPaging(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, RTGCUINT uErr, 201 PCPUMCTXCORE pRegFrame, RTGCPHYS pvFault) 201 202 { 202 203 int rc; -
trunk/src/VBox/VMM/VMReq.cpp
r28800 r30111 480 480 for (unsigned cIterations = 0;; cIterations++) 481 481 { 482 PVMREQ pHead = (PVMREQ)ASMAtomicXchgPtr((void * volatile *)ppHead, pList);482 PVMREQ pHead = ASMAtomicXchgPtrT(ppHead, pList, PVMREQ); 483 483 if (!pHead) 484 484 return; … … 486 486 while (pTail->pNext) 487 487 pTail = pTail->pNext; 488 ASMAtomicWritePtr( (void * volatile *)&pTail->pNext, pList);488 ASMAtomicWritePtr(&pTail->pNext, pList); 489 489 ASMCompilerBarrier(); 490 if (ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pHead, pList))490 if (ASMAtomicCmpXchgPtr(ppHead, pHead, pList)) 491 491 return; 492 ASMAtomicWritePtr( (void * volatile *)&pTail->pNext, NULL);492 ASMAtomicWritePtr(&pTail->pNext, NULL); 493 493 ASMCompilerBarrier(); 494 if (ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pHead, NULL))494 if (ASMAtomicCmpXchgPtr(ppHead, pHead, NULL)) 495 495 return; 496 496 pList = pHead; … … 594 594 PVMREQ pReq = *ppHead; 595 595 if ( pReq 596 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (pNext = pReq->pNext), pReq)596 && !ASMAtomicCmpXchgPtr(ppHead, (pNext = pReq->pNext), pReq) 597 597 && (pReq = *ppHead) 598 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (pNext = pReq->pNext), pReq))598 && !ASMAtomicCmpXchgPtr(ppHead, (pNext = pReq->pNext), pReq)) 599 599 pReq = NULL; 600 600 if (pReq) … … 602 602 Assert(pReq->pNext == pNext); NOREF(pReq); 603 603 #else 604 PVMREQ pReq = (PVMREQ)ASMAtomicXchgPtr((void * volatile *)ppHead, NULL);604 PVMREQ pReq = ASMAtomicXchgPtrT(ppHead, NULL, PVMREQ); 605 605 if (pReq) 606 606 { 607 607 PVMREQ pNext = pReq->pNext; 608 608 if ( pNext 609 && !ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, pNext, NULL))609 && !ASMAtomicCmpXchgPtr(ppHead, pNext, NULL)) 610 610 { 611 611 STAM_COUNTER_INC(&pUVM->vm.s.StatReqAllocRaces); … … 750 750 do 751 751 { 752 pNext = (PVMREQ)ASMAtomicUoReadPtr((void * volatile *)ppHead);753 ASMAtomicWritePtr( (void * volatile *)&pReq->pNext, pNext);752 pNext = ASMAtomicUoReadPtrT(ppHead, PVMREQ); 753 ASMAtomicWritePtr(&pReq->pNext, pNext); 754 754 ASMCompilerBarrier(); 755 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)ppHead, (void *)pReq, (void *)pNext));755 } while (!ASMAtomicCmpXchgPtr(ppHead, pReq, pNext)); 756 756 } 757 757 else … … 857 857 do 858 858 { 859 pNext = (PVMREQ)ASMAtomicUoReadPtr((void * volatile *)&pUVCpu->vm.s.pReqs);860 ASMAtomicWritePtr( (void * volatile *)&pReq->pNext, pNext);859 pNext = ASMAtomicUoReadPtrT(&pUVCpu->vm.s.pReqs, PVMREQ); 860 ASMAtomicWritePtr(&pReq->pNext, pNext); 861 861 ASMCompilerBarrier(); 862 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pUVCpu->vm.s.pReqs, (void *)pReq, (void *)pNext));862 } while (!ASMAtomicCmpXchgPtr(&pUVCpu->vm.s.pReqs, pReq, pNext)); 863 863 864 864 /* … … 891 891 do 892 892 { 893 pNext = (PVMREQ)ASMAtomicUoReadPtr((void * volatile *)&pUVM->vm.s.pReqs);894 ASMAtomicWritePtr( (void * volatile *)&pReq->pNext, pNext);893 pNext = ASMAtomicUoReadPtrT(&pUVM->vm.s.pReqs, PVMREQ); 894 ASMAtomicWritePtr(&pReq->pNext, pNext); 895 895 ASMCompilerBarrier(); 896 } while (!ASMAtomicCmpXchgPtr( (void * volatile *)&pUVM->vm.s.pReqs, (void *)pReq, (void *)pNext));896 } while (!ASMAtomicCmpXchgPtr(&pUVM->vm.s.pReqs, pReq, pNext)); 897 897 898 898 /* … … 996 996 * @param idDstCpu VMCPUID_ANY or virtual CPU ID. 997 997 * @param pReqList The list of requests. 998 * @param pp vReqsPointer to the list head.999 */ 1000 static PVMREQ vmR3ReqProcessUTooManyHelper(PUVM pUVM, VMCPUID idDstCpu, PVMREQ pReqList, void * volatile *ppvReqs)998 * @param ppReqs Pointer to the list head. 999 */ 1000 static PVMREQ vmR3ReqProcessUTooManyHelper(PUVM pUVM, VMCPUID idDstCpu, PVMREQ pReqList, PVMREQ volatile *ppReqs) 1001 1001 { 1002 1002 STAM_COUNTER_INC(&pUVM->vm.s.StatReqMoreThan1); … … 1009 1009 pReqRet = pReqRet->pNext; 1010 1010 } while (pReqRet->pNext); 1011 ASMAtomicWritePtr( (void * volatile *)&pPrev->pNext, NULL);1011 ASMAtomicWritePtr(&pPrev->pNext, NULL); 1012 1012 1013 1013 /* Push the others back onto the list (end of it). */ 1014 1014 Log2(("VMR3ReqProcess: Pushing back %p %p...\n", pReqList, pReqList->pNext)); 1015 if (RT_UNLIKELY(!ASMAtomicCmpXchgPtr(pp vReqs, pReqList, NULL)))1015 if (RT_UNLIKELY(!ASMAtomicCmpXchgPtr(ppReqs, pReqList, NULL))) 1016 1016 { 1017 1017 STAM_COUNTER_INC(&pUVM->vm.s.StatReqPushBackRaces); … … 1019 1019 { 1020 1020 ASMNopPause(); 1021 PVMREQ pReqList2 = (PVMREQ)ASMAtomicXchgPtr(ppvReqs, NULL);1021 PVMREQ pReqList2 = ASMAtomicXchgPtrT(ppReqs, NULL, PVMREQ); 1022 1022 if (pReqList2) 1023 1023 { … … 1025 1025 while (pLast->pNext) 1026 1026 pLast = pLast->pNext; 1027 ASMAtomicWritePtr( (void * volatile *)&pLast->pNext, pReqList);1027 ASMAtomicWritePtr(&pLast->pNext, pReqList); 1028 1028 pReqList = pReqList2; 1029 1029 } 1030 } while (!ASMAtomicCmpXchgPtr(pp vReqs, pReqList, NULL));1030 } while (!ASMAtomicCmpXchgPtr(ppReqs, pReqList, NULL)); 1031 1031 } 1032 1032 … … 1078 1078 * rest back so that we're reentrant. 1079 1079 */ 1080 void * volatile *ppvReqs;1080 PVMREQ volatile *ppReqs; 1081 1081 if (idDstCpu == VMCPUID_ANY) 1082 1082 { 1083 pp vReqs = (void * volatile *)&pUVM->vm.s.pReqs;1083 ppReqs = &pUVM->vm.s.pReqs; 1084 1084 if (RT_LIKELY(pUVM->pVM)) 1085 1085 VM_FF_CLEAR(pUVM->pVM, VM_FF_REQUEST); … … 1089 1089 Assert(idDstCpu < pUVM->cCpus); 1090 1090 Assert(pUVM->aCpus[idDstCpu].vm.s.NativeThreadEMT == RTThreadNativeSelf()); 1091 pp vReqs = (void * volatile *)&pUVM->aCpus[idDstCpu].vm.s.pReqs;1091 ppReqs = &pUVM->aCpus[idDstCpu].vm.s.pReqs; 1092 1092 if (RT_LIKELY(pUVM->pVM)) 1093 1093 VMCPU_FF_CLEAR(&pUVM->pVM->aCpus[idDstCpu], VMCPU_FF_REQUEST); 1094 1094 } 1095 1095 1096 PVMREQ pReq = (PVMREQ)ASMAtomicXchgPtr(ppvReqs, NULL);1096 PVMREQ pReq = ASMAtomicXchgPtrT(ppReqs, NULL, PVMREQ); 1097 1097 if (!pReq) 1098 1098 break; 1099 1099 if (RT_UNLIKELY(pReq->pNext)) 1100 pReq = vmR3ReqProcessUTooManyHelper(pUVM, idDstCpu, pReq, pp vReqs);1100 pReq = vmR3ReqProcessUTooManyHelper(pUVM, idDstCpu, pReq, ppReqs); 1101 1101 1102 1102 /*
Note:
See TracChangeset
for help on using the changeset viewer.