VirtualBox

Changeset 91895 in vbox


Ignore:
Timestamp:
Oct 20, 2021 1:30:17 PM (3 years ago)
Author:
vboxsync
Message:

VMM: Removed raw-mode stuff from PDMQueue. bugref:9517

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/pdmqueue.h

    r90838 r91895  
    5959    /** Pointer to the next item in the pending list - R0 Pointer. */
    6060    R0PTRTYPE(PPDMQUEUEITEMCORE)    pNextR0;
    61     /** Pointer to the next item in the pending list - RC Pointer. */
    62     RCPTRTYPE(PPDMQUEUEITEMCORE)    pNextRC;
    63 #if HC_ARCH_BITS == 64
    64     RTRCPTR                         Alignment0;
    65 #endif
    6661} PDMQUEUEITEMCORE;
    6762
     
    156151VMMDECL(void)                 PDMQueueInsert(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem);
    157152VMMDECL(void)                 PDMQueueInsertEx(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem, uint64_t NanoMaxDelay);
    158 VMMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueRCPtr(PPDMQUEUE pQueue);
    159153VMMDECL(R0PTRTYPE(PPDMQUEUE)) PDMQueueR0Ptr(PPDMQUEUE pQueue);
    160154VMMDECL(bool)                 PDMQueueFlushIfNecessary(PPDMQUEUE pQueue);
  • trunk/src/VBox/VMM/VMMAll/PDMAllQueue.cpp

    r90784 r91895  
    8383/**
    8484 * Queue an item.
     85 *
    8586 * The item must have been obtained using PDMQueueAlloc(). Once the item
    8687 * have been passed to this function it must not be touched!
     
    120121/**
    121122 * Queue an item.
     123 *
    122124 * The item must have been obtained using PDMQueueAlloc(). Once the item
    123125 * have been passed to this function it must not be touched!
     
    145147        Log2(("PDMQueueInsertEx: Setting VMCPU_FF_TO_R3\n"));
    146148    }
    147 #endif
    148 }
    149 
    150 
    151 
    152 /**
    153  * Gets the RC pointer for the specified queue.
    154  *
    155  * @returns The RC address of the queue.
    156  * @returns NULL if pQueue is invalid.
    157  * @param   pQueue          The queue handle.
    158  */
    159 VMMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueRCPtr(PPDMQUEUE pQueue)
    160 {
    161     AssertPtr(pQueue);
    162     Assert(pQueue->pVMR3 && pQueue->pVMRC);
    163 #ifdef IN_RC
    164     return pQueue;
    165 #else
    166     return MMHyperCCToRC(pQueue->CTX_SUFF(pVM), pQueue);
    167149#endif
    168150}
     
    198180    AssertPtr(pQueue);
    199181    if (   pQueue->pPendingR3 != NIL_RTR3PTR
    200         || pQueue->pPendingR0 != NIL_RTR0PTR
    201         || pQueue->pPendingRC != NIL_RTRCPTR)
     182        || pQueue->pPendingR0 != NIL_RTR0PTR)
    202183    {
    203184        pdmQueueSetFF(pQueue);
  • trunk/src/VBox/VMM/VMMR3/PDM.cpp

    r91686 r91895  
    579579
    580580    /*
    581      * Queues.
    582      */
    583     pdmR3QueueRelocate(pVM, offDelta);
    584     pVM->pdm.s.pDevHlpQueueRC = PDMQueueRCPtr(pVM->pdm.s.pDevHlpQueueR3);
    585 
    586     /*
    587581     * The registered PIC.
    588582     */
  • trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp

    r90346 r91895  
    135135    AssertRCReturn(rc, rc);
    136136    pVM->pdm.s.pDevHlpQueueR0 = PDMQueueR0Ptr(pVM->pdm.s.pDevHlpQueueR3);
    137     pVM->pdm.s.pDevHlpQueueRC = PDMQueueRCPtr(pVM->pdm.s.pDevHlpQueueR3);
    138 
    139137
    140138    /*
  • trunk/src/VBox/VMM/VMMR3/PDMQueue.cpp

    r87773 r91895  
    8686    pQueue->pVMR3 = pVM;
    8787    pQueue->pVMR0 = fRZEnabled ? pVM->pVMR0ForCall : NIL_RTR0PTR;
    88     pQueue->pVMRC = fRZEnabled ? pVM->pVMRC : NIL_RTRCPTR;
    8988    pQueue->pszName = pszName;
    9089    pQueue->cMilliesInterval = cMilliesInterval;
     
    102101        pQueue->aFreeItems[i].pItemR3 = pItem;
    103102        if (fRZEnabled)
    104         {
    105103            pQueue->aFreeItems[i].pItemR0 = MMHyperR3ToR0(pVM, pItem);
    106             pQueue->aFreeItems[i].pItemRC = MMHyperR3ToRC(pVM, pItem);
    107         }
    108104    }
    109105
     
    455451        pQueue->hTimer = NIL_TMTIMERHANDLE;
    456452    }
    457     if (pQueue->pVMRC)
    458     {
    459         pQueue->pVMRC = NIL_RTRCPTR;
     453    if (pQueue->pVMR0)
     454    {
    460455        pQueue->pVMR0 = NIL_RTR0PTR;
    461456        MMHyperFree(pVM, pQueue);
     
    569564    pdmUnlock(pVM);
    570565    return VINF_SUCCESS;
    571 }
    572 
    573 
    574 /**
    575  * Relocate the queues.
    576  *
    577  * @param   pVM             The cross context VM structure.
    578  * @param   offDelta        The relocation delta.
    579  */
    580 void pdmR3QueueRelocate(PVM pVM, RTGCINTPTR offDelta)
    581 {
    582     /*
    583      * Process the queues.
    584      */
    585     PUVM      pUVM       = pVM->pUVM;
    586     PPDMQUEUE pQueueNext = pUVM->pdm.s.pQueuesTimer;
    587     PPDMQUEUE pQueue     = pUVM->pdm.s.pQueuesForced;
    588     do
    589     {
    590         while (pQueue)
    591         {
    592             if (pQueue->pVMRC)
    593             {
    594                 pQueue->pVMRC = pVM->pVMRC;
    595 
    596                 /* Pending RC items. */
    597                 if (pQueue->pPendingRC)
    598                 {
    599                     pQueue->pPendingRC += offDelta;
    600                     PPDMQUEUEITEMCORE pCur = (PPDMQUEUEITEMCORE)MMHyperRCToR3(pVM, pQueue->pPendingRC);
    601                     while (pCur->pNextRC)
    602                     {
    603                         pCur->pNextRC += offDelta;
    604                         pCur = (PPDMQUEUEITEMCORE)MMHyperRCToR3(pVM, pCur->pNextRC);
    605                     }
    606                 }
    607 
    608                 /* The free items. */
    609                 uint32_t i = pQueue->iFreeTail;
    610                 while (i != pQueue->iFreeHead)
    611                 {
    612                     pQueue->aFreeItems[i].pItemRC = MMHyperR3ToRC(pVM, pQueue->aFreeItems[i].pItemR3);
    613                     i = (i + 1) % (pQueue->cItems + PDMQUEUE_FREE_SLACK);
    614                 }
    615             }
    616 
    617             /* next queue */
    618             pQueue = pQueue->pNext;
    619         }
    620 
    621         /* next queue list */
    622         pQueue = pQueueNext;
    623         pQueueNext = NULL;
    624     } while (pQueue);
    625566}
    626567
     
    654595        for (PPDMQUEUE pCur = pVM->pUVM->pdm.s.pQueuesForced; pCur; pCur = pCur->pNext)
    655596            if (    pCur->pPendingR3
    656                 ||  pCur->pPendingR0
    657                 ||  pCur->pPendingRC)
     597                ||  pCur->pPendingR0)
    658598                pdmR3QueueFlush(pCur);
    659599
     
    684624     */
    685625    PPDMQUEUEITEMCORE pItems   = ASMAtomicXchgPtrT(&pQueue->pPendingR3, NULL, PPDMQUEUEITEMCORE);
    686     RTRCPTR           pItemsRC = ASMAtomicXchgRCPtr(&pQueue->pPendingRC, NIL_RTRCPTR);
    687626    RTR0PTR           pItemsR0 = ASMAtomicXchgR0Ptr(&pQueue->pPendingR0, NIL_RTR0PTR);
    688627
    689628    AssertMsgReturn(   pItemsR0
    690                     || pItemsRC
    691629                    || pItems,
    692630                    ("Someone is racing us? This shouldn't happen!\n"),
     
    702640        PPDMQUEUEITEMCORE pInsert = pCur;
    703641        pCur = pCur->pNextR3;
    704         pInsert->pNextR3 = pItems;
    705         pItems = pInsert;
    706     }
    707 
    708     /*
    709      * Do the same for any pending RC items.
    710      */
    711     while (pItemsRC)
    712     {
    713         PPDMQUEUEITEMCORE pInsert = (PPDMQUEUEITEMCORE)MMHyperRCToR3(pQueue->pVMR3, pItemsRC);
    714         pItemsRC = pInsert->pNextRC;
    715         pInsert->pNextRC = NIL_RTRCPTR;
    716642        pInsert->pNextR3 = pItems;
    717643        pItems = pInsert;
     
    845771
    846772    pQueue->aFreeItems[i].pItemR3 = pItem;
    847     if (pQueue->pVMRC)
    848     {
    849         pQueue->aFreeItems[i].pItemRC = MMHyperR3ToRC(pQueue->pVMR3, pItem);
     773    if (pQueue->pVMR0)
    850774        pQueue->aFreeItems[i].pItemR0 = MMHyperR3ToR0(pQueue->pVMR3, pItem);
    851     }
    852775
    853776    if (!ASMAtomicCmpXchgU32(&pQueue->iFreeHead, iNext, i))
     
    866789
    867790    if (   pQueue->pPendingR3
    868         || pQueue->pPendingR0
    869         || pQueue->pPendingRC)
     791        || pQueue->pPendingR0)
    870792        pdmR3QueueFlush(pQueue);
    871793    int rc = TMTimerSetMillies(pVM, hTimer, pQueue->cMilliesInterval);
  • trunk/src/VBox/VMM/include/PDMInternal.h

    r90677 r91895  
    10631063    /** LIFO of pending items - R0. */
    10641064    R0PTRTYPE(PPDMQUEUEITEMCORE) volatile pPendingR0;
    1065     /** Pointer to the GC VM and indicator for GC enabled queue.
    1066      * If this is NULL, the queue cannot be used in GC.
    1067      */
    1068     PVMRC                           pVMRC;
    1069     /** LIFO of pending items - GC. */
    1070     RCPTRTYPE(PPDMQUEUEITEMCORE) volatile pPendingRC;
    10711065
    10721066    /** Item size (bytes). */
     
    11071101        /** Pointer to the free item - HC Ptr. */
    11081102        R0PTRTYPE(PPDMQUEUEITEMCORE) volatile   pItemR0;
    1109         /** Pointer to the free item - GC Ptr. */
    1110         RCPTRTYPE(PPDMQUEUEITEMCORE) volatile   pItemRC;
    1111 #if HC_ARCH_BITS == 64
    1112         RTRCPTR                                 Alignment0;
    1113 #endif
    11141103    }                               aFreeItems[1];
    11151104} PDMQUEUE;
     
    14341423    /** Queue in which devhlp tasks are queued for R3 execution - R0 Ptr. */
    14351424    R0PTRTYPE(PPDMQUEUE)            pDevHlpQueueR0;
    1436     /** Queue in which devhlp tasks are queued for R3 execution - RC Ptr. */
    1437     RCPTRTYPE(PPDMQUEUE)            pDevHlpQueueRC;
    1438     /** Pointer to the queue which should be manually flushed - RC Ptr.
    1439      * Only touched by EMT. */
    1440     RCPTRTYPE(struct PDMQUEUE *)    pQueueFlushRC;
    14411425    /** Pointer to the queue which should be manually flushed - R0 Ptr.
    14421426     * Only touched by EMT. */
     
    16761660char       *pdmR3FileR3(const char *pszFile, bool fShared);
    16771661int         pdmR3LoadR3U(PUVM pUVM, const char *pszFilename, const char *pszName);
    1678 
    1679 void        pdmR3QueueRelocate(PVM pVM, RTGCINTPTR offDelta);
    16801662
    16811663int         pdmR3TaskInit(PVM pVM);
  • trunk/src/VBox/VMM/testcase/tstVMStruct.h

    r91345 r91895  
    609609    GEN_CHECK_OFF_DOT(PDMQUEUE, aFreeItems[0].pItemR3);
    610610    GEN_CHECK_OFF_DOT(PDMQUEUE, aFreeItems[0].pItemR0);
    611     GEN_CHECK_OFF_DOT(PDMQUEUE, aFreeItems[1].pItemRC);
    612611    GEN_CHECK_SIZE(PDMDEVHLPTASK);
    613612    GEN_CHECK_OFF(PDMDEVHLPTASK, Core);
Note: See TracChangeset for help on using the changeset viewer.

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