Changeset 81368 in vbox
- Timestamp:
- Oct 18, 2019 7:36:19 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r81367 r81368 92 92 #define VIRTIOSCSI_REQ_QUEUE_CNT 1 /**< Number of req queues exposed by dev. */ 93 93 #define VIRTIOSCSI_QUEUE_CNT VIRTIOSCSI_REQ_QUEUE_CNT + 2 94 #define VIRTIOSCSI_MAX_LUN 1/* < VirtIO specification, section 5.6.4 */95 #define VIRTIOSCSI_MAX_COMMANDS_PER_LUN 128 /* < T.B.D. What is a good value for this? */96 #define VIRTIOSCSI_MAX_SEG_COUNT 126 94 #define VIRTIOSCSI_MAX_LUN 256 /* < VirtIO specification, section 5.6.4 */ 95 #define VIRTIOSCSI_MAX_COMMANDS_PER_LUN 128 /* < T.B.D. What is a good value for this? */ 96 #define VIRTIOSCSI_MAX_SEG_COUNT 126 /* < T.B.D. What is a good value for this? */ 97 97 #define VIRTIOSCSI_MAX_SECTORS_HINT 0x10000 /* < VirtIO specification, section 5.6.4 */ 98 98 #define VIRTIOSCSI_MAX_CHANNEL_HINT 0 /* < VirtIO specification, section 5.6.4 should be 0 */ … … 781 781 RT_NOREF(pszCtrlRespText); 782 782 783 RTSGSEG aRe spSegs[2];784 aRe spSegs[0].cbSeg = sizeof(struct REQ_RESP_HDR);785 aRe spSegs[0].pvSeg = pRespHdr;786 aRe spSegs[1].cbSeg = pThis->virtioScsiConfig.uSenseSize;787 aRe spSegs[1].pvSeg = abSenseBuf;783 RTSGSEG aReqSegs[2]; 784 aReqSegs[0].cbSeg = sizeof(pRespHdr); 785 aReqSegs[0].pvSeg = pRespHdr; 786 aReqSegs[1].cbSeg = pThis->virtioScsiConfig.uSenseSize; 787 aReqSegs[1].pvSeg = abSenseBuf; 788 788 789 789 if (pbSense && pRespHdr->uSenseLen) … … 792 792 pRespHdr->uSenseLen = 0; 793 793 794 RTSGBUF re spSegBuf;795 RTSgBufInit(&re spSegBuf, aRespSegs, RT_ELEMENTS(aRespSegs));794 RTSGBUF reqSegBuf; 795 RTSgBufInit(&reqSegBuf, aReqSegs, RT_ELEMENTS(aReqSegs)); 796 796 797 797 if (pThis->fResetting) 798 798 pRespHdr->uResponse = VIRTIOSCSI_S_RESET; 799 799 800 virtioQueuePut(pThis->hVirtio, qIdx, &re spSegBuf, pDescChain, true /* fFence */);800 virtioQueuePut(pThis->hVirtio, qIdx, &reqSegBuf, pDescChain, true /* fFence */); 801 801 virtioQueueSync(pThis->hVirtio, qIdx); 802 802 … … 966 966 RTSGSEG aReqSegs[4]; 967 967 aReqSegs[cSegs].pvSeg = &respHdr; 968 aReqSegs[cSegs++].cbSeg = sizeof( x);968 aReqSegs[cSegs++].cbSeg = sizeof(respHdr); 969 969 970 970 aReqSegs[cSegs].pvSeg = pReq->pbSense; … … 1145 1145 } 1146 1146 else 1147 if (RT_UNLIKELY(uScsiLun != 0)) 1148 { 1149 Log2Func(("Error submitting request to bad target (%d) or bad LUN (%d)\n", uTarget, uScsiLun)); 1150 uint8_t abSense[] = { RT_BIT(7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED, 1151 0, SCSI_SENSE_ILLEGAL_REQUEST, 1152 0, 0, 0, 0, 10, SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED, 0, 0 }; 1153 struct REQ_RESP_HDR respHdr = { 0 }; 1154 respHdr.uSenseLen = sizeof(abSense); 1155 respHdr.uStatus = SCSI_STATUS_CHECK_CONDITION; 1156 respHdr.uResponse = VIRTIOSCSI_S_OK; 1157 respHdr.uResidual = cbDataOut + cbDataIn; 1158 virtioScsiReqErr(pThis, qIdx, pDescChain, &respHdr, abSense); 1159 return VINF_SUCCESS; 1160 } 1161 else 1147 1162 if (RT_UNLIKELY(uTarget >= pThis->cTargets || !pTarget->fPresent)) 1148 1163 { … … 1156 1171 respHdr.uResidual = cbDataIn + cbDataOut; 1157 1172 virtioScsiReqErr(pThis, qIdx, pDescChain, &respHdr , abSense); 1158 return VINF_SUCCESS;1159 }1160 else1161 if (RT_UNLIKELY(uScsiLun != 0))1162 {1163 Log2Func(("Error submitting request to bad LUN (%d)\n", uScsiLun));1164 uint8_t abSense[] = { RT_BIT(7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED,1165 0, SCSI_SENSE_ILLEGAL_REQUEST,1166 0, 0, 0, 0, 10, SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED, 0, 0 };1167 struct REQ_RESP_HDR respHdr = { 0 };1168 respHdr.uSenseLen = sizeof(abSense);1169 respHdr.uStatus = SCSI_STATUS_CHECK_CONDITION;1170 respHdr.uResponse = VIRTIOSCSI_S_OK;1171 respHdr.uResidual = cbDataOut + cbDataIn;1172 virtioScsiReqErr(pThis, qIdx, pDescChain, &respHdr, abSense);1173 1173 return VINF_SUCCESS; 1174 1174 }
Note:
See TracChangeset
for help on using the changeset viewer.