- Timestamp:
- Jan 28, 2025 3:37:55 PM (3 months ago)
- svn:sync-xref-src-repo-rev:
- 167221
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r107851 r107969 1645 1645 if (!pThisCC->fQuiescing) 1646 1646 { 1647 1648 1649 1647 /* Process any reqs that were suspended saved to the redo queue in save exec. */ 1648 for (int i = 0; i < pWorkerR3->cRedoDescs; i++) 1649 { 1650 1650 PVIRTQBUF pVirtqBuf = virtioCoreR3VirtqBufAlloc(); 1651 1651 if (!pVirtqBuf) … … 1655 1655 } 1656 1656 int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, uVirtqNbr, 1657 pWorkerR3->auRedoDescs[i], pVirtqBuf);1657 pWorkerR3->auRedoDescs[i], pVirtqBuf); 1658 1658 if (RT_FAILURE(rc)) 1659 1659 LogRel(("Error fetching desc chain to redo, %Rrc", rc)); … … 1663 1663 LogRel(("Error submitting req packet, resetting %Rrc", rc)); 1664 1664 1665 1666 1667 1668 1669 1665 virtioCoreR3VirtqBufRelease(&pThis->Virtio, pVirtqBuf); 1666 } 1667 pWorkerR3->cRedoDescs = 0; 1668 1669 Log6Func(("fetching next descriptor chain from %s\n", VIRTQNAME(uVirtqNbr))); 1670 1670 PVIRTQBUF pVirtqBuf = virtioCoreR3VirtqBufAlloc(); 1671 1671 if (!pVirtqBuf) … … 1700 1700 1701 1701 /********************************************************************************************************************************* 1702 * Sending ev nets1702 * Sending events 1703 1703 *********************************************************************************************************************************/ 1704 1704 … … 2146 2146 AssertMsg(!pThis->cActiveReqs, ("There are still outstanding requests on this device\n")); 2147 2147 2148 2149 2150 2151 2148 pHlp->pfnSSMPutU32(pSSM, pThis->cTargets); 2149 2150 for (uint16_t uTarget = 0; uTarget < pThis->cTargets; uTarget++) 2151 { 2152 2152 PVIRTIOSCSITARGET pTarget = &pThisCC->paTargetInstances[uTarget]; 2153 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2154 /* Query all suspended requests and store them in the request queue. */ 2155 if (pTarget->pDrvMediaEx) 2156 { 2157 uint32_t cReqsRedo = pTarget->pDrvMediaEx->pfnIoReqGetSuspendedCount(pTarget->pDrvMediaEx); 2158 2159 pHlp->pfnSSMPutU16(pSSM, cReqsRedo); 2160 2161 if (cReqsRedo) 2162 { 2163 PDMMEDIAEXIOREQ hIoReq; 2164 PVIRTIOSCSIREQ pReq; 2165 2166 int rc = pTarget->pDrvMediaEx->pfnIoReqQuerySuspendedStart(pTarget->pDrvMediaEx, &hIoReq, 2167 (void **)&pReq); 2168 AssertRCBreak(rc); 2169 2170 while(--cReqsRedo) 2171 { 2172 2172 pHlp->pfnSSMPutU16(pSSM, pReq->uVirtqNbr); 2173 2173 pHlp->pfnSSMPutU16(pSSM, pReq->pVirtqBuf->uHeadIdx); … … 2176 2176 &hIoReq, (void **)&pReq); 2177 2177 AssertRCBreak(rc); 2178 2179 2180 2181 2178 } 2179 } 2180 } 2181 } 2182 2182 2183 2183 /* … … 2484 2484 AssertMsgFailed(("%s Failed to destroythread rc=%Rrc rcThread=%Rrc\n", 2485 2485 __FUNCTION__, rc, rcThread)); 2486 pThisCC->aWorkers[uVirtqNbr].pThread = NULL;2486 pThisCC->aWorkers[uVirtqNbr].pThread = NULL; 2487 2487 } 2488 2488 … … 2534 2534 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Bootable", &pThis->fBootable, true); 2535 2535 if (RT_FAILURE(rc)) 2536 2536 return PDMDEV_SET_ERROR(pDevIns, rc, N_("virtio-scsi configuration error: failed to read Bootable as boolean")); 2537 2537 2538 2538 LogRel(("%s: Targets=%u Bootable=%RTbool (unimplemented) R0Enabled=%RTbool RCEnabled=%RTbool\n",
Note:
See TracChangeset
for help on using the changeset viewer.