VirtualBox

Ignore:
Timestamp:
Sep 23, 2010 10:15:08 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66136
Message:

IPRT: Added RTMemAllocEx[Tag] and RTMemFreeEx, only implemented in ring-0 only.

Location:
trunk/src/VBox/Runtime/r0drv/linux
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c

    r32674 r32707  
    111111 * OS specific allocation function.
    112112 */
    113 PRTMEMHDR rtR0MemAlloc(size_t cb, uint32_t fFlags)
     113int rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr)
    114114{
    115115    PRTMEMHDR pHdr;
     
    120120    if (fFlags & RTMEMHDR_FLAG_EXEC)
    121121    {
    122         AssertReturn(!(fFlags & RTMEMHDR_FLAG_ANY_CTX), NULL);
     122        if (fFlags & RTMEMHDR_FLAG_ANY_CTX)
     123            return VERR_NOT_SUPPORTED;
    123124
    124125#if defined(RT_ARCH_AMD64)
     
    149150        {
    150151            fFlags |= RTMEMHDR_FLAG_KMALLOC;
    151             pHdr = kmalloc(cb + sizeof(*pHdr), GFP_KERNEL);
     152            pHdr = kmalloc(cb + sizeof(*pHdr),
     153                           (fFlags & RTMEMHDR_FLAG_ANY_CTX_ALLOC) ? GFP_ATOMIC : GFP_KERNEL);
    152154        }
    153155        else
    154156            pHdr = vmalloc(cb + sizeof(*pHdr));
    155157    }
     158    if (RT_UNLIKELY(!pHdr))
     159        return VERR_NO_MEMORY;
    156160
    157161    /*
    158162     * Initialize.
    159163     */
    160     if (pHdr)
    161     {
    162         pHdr->u32Magic  = RTMEMHDR_MAGIC;
    163         pHdr->fFlags    = fFlags;
    164         pHdr->cb        = cb;
    165         pHdr->cbReq     = cb;
    166     }
    167     return pHdr;
     164    pHdr->u32Magic  = RTMEMHDR_MAGIC;
     165    pHdr->fFlags    = fFlags;
     166    pHdr->cb        = cb;
     167    pHdr->cbReq     = cb;
     168
     169    *ppHdr = pHdr;
     170    return VINF_SUCCESS;
    168171}
    169172
  • trunk/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c

    r32670 r32707  
    434434     */
    435435    ASMAtomicWriteU32(&pTimer->u32Magic, ~RTTIMER_MAGIC);
    436 #if 0 /*fixme*/
    437     rtR0MemFreeNoCtxCheck(pTimer);
    438 #else
    439     RTMemFree(pTimer);
    440 #endif
     436    RTMemFreeEx(pTimer, RT_OFFSETOF(RTTIMER, aSubTimers[pTimer->cCpus]));
    441437    if (hSpinlock != NIL_RTSPINLOCK)
    442438        RTSpinlockDestroy(hSpinlock);
     
    13931389    RTCPUID     iCpu;
    13941390    unsigned    cCpus;
     1391    int         rc;
    13951392
    13961393    *ppTimer = NULL;
     
    14191416#endif
    14201417
    1421     pTimer = (PRTTIMER)RTMemAllocZ(RT_OFFSETOF(RTTIMER, aSubTimers[cCpus]));
    1422     if (!pTimer)
    1423         return VERR_NO_MEMORY;
     1418    rc = RTMemAllocEx(RT_OFFSETOF(RTTIMER, aSubTimers[cCpus]), 0,
     1419                      RTMEMALLOCEX_FLAGS_ZEROED | RTMEMALLOCEX_FLAGS_ANY_CTX_FREE, (void **)&pTimer);
     1420    if (RT_FAILURE(rc))
     1421        return rc;
    14241422
    14251423    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette