VirtualBox

Changeset 107970 in vbox


Ignore:
Timestamp:
Jan 28, 2025 3:43:36 PM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167222
Message:

DevVirtioSCSI: Load pending requests only for targets with an attached drive, to match the behavior of the function which saves the state.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp

    r107969 r107970  
    20512051    for (uint16_t uTarget = 0; uTarget < pThis->cTargets; uTarget++)
    20522052    {
    2053         uint16_t cReqsRedo;
    2054         rc = pHlp->pfnSSMGetU16(pSSM, &cReqsRedo);
    2055         AssertRCReturn(rc, rc);
    2056         AssertReturn(cReqsRedo < VIRTQ_SIZE,
    2057                      pHlp->pfnSSMSetLoadError(pSSM, VERR_SSM_DATA_UNIT_FORMAT_CHANGED, RT_SRC_POS,
    2058                                               N_("Bad count of I/O transactions to re-do in saved state (%#x, max %#x - 1)"),
    2059                                               cReqsRedo, VIRTQ_SIZE));
    2060 
    2061         for (uint16_t uVirtqNbr = VIRTQ_REQ_BASE; uVirtqNbr < VIRTIOSCSI_VIRTQ_CNT; uVirtqNbr++)
     2053        PVIRTIOSCSITARGET pTarget = &pThisCC->paTargetInstances[uTarget];
     2054
     2055        /* Place all suspended requests in the request queue. */
     2056        if (pTarget->pDrvMediaEx)
    20622057        {
    2063             PVIRTIOSCSIWORKERR3 pWorkerR3 = &pThisCC->aWorkers[uVirtqNbr];
    2064             pWorkerR3->cRedoDescs = 0;
    2065         }
    2066 
    2067         for (int i = 0; i < cReqsRedo; i++)
    2068         {
    2069             uint16_t uVirtqNbr;
    2070             rc = pHlp->pfnSSMGetU16(pSSM, &uVirtqNbr);
     2058
     2059            uint16_t cReqsRedo;
     2060            rc = pHlp->pfnSSMGetU16(pSSM, &cReqsRedo);
    20712061            AssertRCReturn(rc, rc);
    2072             AssertReturn(uVirtqNbr < VIRTIOSCSI_VIRTQ_CNT,
     2062            AssertReturn(cReqsRedo < VIRTQ_SIZE,
    20732063                         pHlp->pfnSSMSetLoadError(pSSM, VERR_SSM_DATA_UNIT_FORMAT_CHANGED, RT_SRC_POS,
    2074                                                   N_("Bad queue index for re-do in saved state (%#x, max %#x)"),
    2075                                                   uVirtqNbr, VIRTIOSCSI_VIRTQ_CNT - 1));
    2076 
    2077             uint16_t idxHead;
    2078             rc = pHlp->pfnSSMGetU16(pSSM, &idxHead);
    2079             AssertRCReturn(rc, rc);
    2080             AssertReturn(idxHead < VIRTQ_SIZE,
    2081                          pHlp->pfnSSMSetLoadError(pSSM, VERR_SSM_DATA_UNIT_FORMAT_CHANGED, RT_SRC_POS,
    2082                                                   N_("Bad queue element index for re-do in saved state (%#x, max %#x)"),
    2083                                                   idxHead, VIRTQ_SIZE - 1));
    2084 
    2085             PVIRTIOSCSIWORKERR3 pWorkerR3 = &pThisCC->aWorkers[uVirtqNbr];
    2086             pWorkerR3->auRedoDescs[pWorkerR3->cRedoDescs++] = idxHead;
    2087             pWorkerR3->cRedoDescs %= VIRTQ_SIZE;
     2064                                                  N_("Bad count of I/O transactions to re-do in saved state (%#x, max %#x - 1)"),
     2065                                                  cReqsRedo, VIRTQ_SIZE));
     2066
     2067            for (uint16_t uVirtqNbr = VIRTQ_REQ_BASE; uVirtqNbr < VIRTIOSCSI_VIRTQ_CNT; uVirtqNbr++)
     2068            {
     2069                PVIRTIOSCSIWORKERR3 pWorkerR3 = &pThisCC->aWorkers[uVirtqNbr];
     2070                pWorkerR3->cRedoDescs = 0;
     2071            }
     2072
     2073            for (int i = 0; i < cReqsRedo; i++)
     2074            {
     2075                uint16_t uVirtqNbr;
     2076                rc = pHlp->pfnSSMGetU16(pSSM, &uVirtqNbr);
     2077                AssertRCReturn(rc, rc);
     2078                AssertReturn(uVirtqNbr < VIRTIOSCSI_VIRTQ_CNT,
     2079                             pHlp->pfnSSMSetLoadError(pSSM, VERR_SSM_DATA_UNIT_FORMAT_CHANGED, RT_SRC_POS,
     2080                                                      N_("Bad queue index for re-do in saved state (%#x, max %#x)"),
     2081                                                      uVirtqNbr, VIRTIOSCSI_VIRTQ_CNT - 1));
     2082
     2083                uint16_t idxHead;
     2084                rc = pHlp->pfnSSMGetU16(pSSM, &idxHead);
     2085                AssertRCReturn(rc, rc);
     2086                AssertReturn(idxHead < VIRTQ_SIZE,
     2087                             pHlp->pfnSSMSetLoadError(pSSM, VERR_SSM_DATA_UNIT_FORMAT_CHANGED, RT_SRC_POS,
     2088                                                      N_("Bad queue element index for re-do in saved state (%#x, max %#x)"),
     2089                                                      idxHead, VIRTQ_SIZE - 1));
     2090
     2091                PVIRTIOSCSIWORKERR3 pWorkerR3 = &pThisCC->aWorkers[uVirtqNbr];
     2092                pWorkerR3->auRedoDescs[pWorkerR3->cRedoDescs++] = idxHead;
     2093                pWorkerR3->cRedoDescs %= VIRTQ_SIZE;
     2094            }
    20882095        }
    20892096    }
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