Changeset 97400 in vbox for trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
- Timestamp:
- Nov 4, 2022 1:36:24 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r96407 r97400 804 804 #endif 805 805 806 /** 807 * Releases one reference from the given controller instances active request counter. 808 * 809 * @returns nothing. 810 * @param pDevIns The device instance. 811 * @param pThis VirtIO SCSI shared instance data. 812 * @param pThisCC VirtIO SCSI ring-3 instance data. 813 */ 814 DECLINLINE(void) virtioScsiR3Release(PPDMDEVINS pDevIns, PVIRTIOSCSI pThis, PVIRTIOSCSICC pThisCC) 815 { 816 Assert(pThis->cActiveReqs); 817 818 if (!ASMAtomicDecU32(&pThis->cActiveReqs) && pThisCC->fQuiescing) 819 PDMDevHlpAsyncNotificationCompleted(pDevIns); 820 } 821 822 /** 823 * Retains one reference for the given controller instances active request counter. 824 * 825 * @returns nothing. 826 * @param pThis VirtIO SCSI shared instance data. 827 */ 828 DECLINLINE(void) virtioScsiR3Retain(PVIRTIOSCSI pThis) 829 { 830 ASMAtomicIncU32(&pThis->cActiveReqs); 831 } 832 806 833 /** Internal worker. */ 807 834 static void virtioScsiR3FreeReq(PVIRTIOSCSITARGET pTarget, PVIRTIOSCSIREQ pReq) … … 865 892 virtioCoreR3VirtqUsedBufPut(pDevIns, &pThis->Virtio, uVirtqNbr, &ReqSgBuf, pVirtqBuf, true /* fFence */); 866 893 virtioCoreVirtqUsedRingSync(pDevIns, &pThis->Virtio, uVirtqNbr); 867 868 if (!ASMAtomicDecU32(&pThis->cActiveReqs) && pThisCC->fQuiescing)869 PDMDevHlpAsyncNotificationCompleted(pDevIns);870 894 871 895 Log2(("---------------------------------------------------------------------------------\n")); … … 1059 1083 1060 1084 virtioScsiR3FreeReq(pTarget, pReq); 1061 1062 if (!ASMAtomicDecU32(&pThis->cActiveReqs) && pThisCC->fQuiescing) 1063 PDMDevHlpAsyncNotificationCompleted(pDevIns); 1064 1085 virtioScsiR3Release(pDevIns, pThis, pThisCC); 1065 1086 return rc; 1066 1087 } … … 1156 1177 uint16_t uVirtqNbr, PVIRTQBUF pVirtqBuf) 1157 1178 { 1158 1159 ASMAtomicIncU32(&pThis->cActiveReqs);1160 1161 1179 /* 1162 1180 * Validate configuration values we use here before we start. … … 1295 1313 * Have underlying driver allocate a req of size set during initialization of this device. 1296 1314 */ 1315 virtioScsiR3Retain(pThis); 1316 1297 1317 PDMMEDIAEXIOREQ hIoReq = NULL; 1298 1318 PVIRTIOSCSIREQ pReq = NULL; … … 1302 1322 PDMIMEDIAEX_F_SUSPEND_ON_RECOVERABLE_ERR); 1303 1323 1304 AssertMsgRCReturn(rc, ("Failed to allocate I/O request, rc=%Rrc\n", rc), rc); 1324 if (RT_FAILURE(rc)) 1325 { 1326 virtioScsiR3Release(pDevIns, pThis, pThisCC); 1327 return rc; 1328 } 1305 1329 1306 1330 pReq->hIoReq = hIoReq; … … 1355 1379 virtioScsiR3ReqErr(pDevIns, pThis, pThisCC, uVirtqNbr, pVirtqBuf, &respHdr, abSense, cbSenseCfg); 1356 1380 virtioScsiR3FreeReq(pTarget, pReq); 1381 virtioScsiR3Release(pDevIns, pThis, pThisCC); 1357 1382 } 1358 1383 return VINF_SUCCESS; … … 2393 2418 { 2394 2419 /* Stop considering this request active */ 2395 if (!ASMAtomicDecU32(&pThis->cActiveReqs) && pThisCC->fQuiescing) 2396 PDMDevHlpAsyncNotificationCompleted(pDevIns); 2420 virtioScsiR3Release(pDevIns, pThis, pThisCC); 2397 2421 break; 2398 2422 } 2399 2423 case PDMMEDIAEXIOREQSTATE_ACTIVE: 2400 ASMAtomicIncU32(&pThis->cActiveReqs);2424 virtioScsiR3Retain(pThis); 2401 2425 break; 2402 2426 default:
Note:
See TracChangeset
for help on using the changeset viewer.