VirtualBox

Changeset 91895 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Oct 20, 2021 1:30:17 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
147699
Message:

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

Location:
trunk/src/VBox/VMM/VMMR3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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);
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