- Timestamp:
- Aug 31, 2019 9:19:08 PM (5 years ago)
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r80521 r80522 487 487 out[0] = 0x01; out[1] = target; out[2] = (lun >> 8) & 0x40; out[3] = lun & 0xff; *((uint16_t *)out + 4) = 0; 488 488 489 /** 490 * Do a hex dump of a buffer 491 * @param pv Pointer to array to dump 492 * @param cb Number of characters to dump 493 * @param uBase Base address of offset addresses displayed 494 * @param pszTitle Header line/title for the dump 495 * 496 */ 497 void virtioScsiHexDump(uint8_t *pv, size_t cb, uint32_t uBase, const char *pszTitle) { 498 if (pszTitle) 499 Log2(("%s [%d bytes]:\n", pszTitle, cb)); 500 for (uint32_t i = 0; i < RT_MAX(1, (cb / 16)); i++) 501 { 502 uint32_t uAddr = i * 16 + uBase; 503 Log2(("%x%x%x%x: ", (uAddr >> 12) & 0xf, (uAddr >> 8) & 0xf, (uAddr >> 4) & 0xf, uAddr & 0xf)); 504 for (int j = 0; j < 16; j++) 505 { 506 if (i * 16 + j >= cb) 507 Log2(("-- %s", (j + 1) % 8 ? "" : " ")); 508 else 509 { 510 uint8_t u8 = pv[i * 16 + j]; 511 Log2(("%x%x %s", u8 >> 4 & 0xf, u8 & 0xf, (j + 1) % 8 ? "" : " ")); 512 } 513 } 514 for (int j = 0; j < 16; j++ ) { 515 if (i * 16 + j >= cb) 516 Log2((" ")); 517 else 518 { 519 uint8_t u8 = pv[i * 16 + j]; 520 Log2(("%c", u8 >= 0x20 && u8 <= 0x7e ? u8 : '.')); 521 } 522 } 523 Log2(("\n")); 524 } 525 Log2(("\n")); 526 } 489 527 DECLINLINE(const char *) virtioGetTMFTypeText(uint32_t uSubType) 490 528 { … … 567 605 } 568 606 607 uint8_t virtioScsiEstimateCdbLen(uint8_t uCmd, uint8_t cbMax) 608 { 609 if (uCmd < 0x1f) 610 return 6; 611 else if (uCmd >= 0x20 && uCmd < 0x60) 612 return 10; 613 else if (uCmd >= 0x60 && uCmd < 0x80) 614 return cbMax; 615 else if (uCmd >= 0x80 && uCmd < 0xa0) 616 return 16; 617 else if (uCmd >= 0xa0 && uCmd < 0xC0) 618 return 12; 619 else 620 return cbMax; 621 } 569 622 DECLINLINE(uint8_t) virtioScsiMapVerrToVirtio(uint32_t vboxRc) 570 623 { … … 818 871 * @returns virtual box status code 819 872 */ 820 static int virtioScsiReq Complete(PVIRTIOSCSI pThis, uint16_t qIdx, uint32_t rcReq)873 static int virtioScsiReqFinish(PVIRTIOSCSI pThis, uint16_t qIdx, uint32_t rcReq) 821 874 { 822 875 struct REQ_RESP_HDR respHdr; … … 832 885 virtioQueueSync(pThis->hVirtio, qIdx); 833 886 LogFunc(("Response code: %s\n", virtioGetReqRespText(respHdr.uResponse))); 887 Log(("---------------------------------------------------------------------------------\n")); 834 888 return VINF_SUCCESS; 835 889 } 836 890 837 static int virtioScsiR 3ReqComplete(PVIRTIOSCSI pThis, PVIRTIOSCSIREQ pReq, int rcReq)891 static int virtioScsiReqFinish(PVIRTIOSCSI pThis, PVIRTIOSCSIREQ pReq, int rcReq) 838 892 { 839 893 PVIRTIOSCSITARGET pTarget = pReq->pTarget; … … 860 914 861 915 862 LogFunc(("SCSI Status = %x (%s)\n", pReq->uStatus, virtioGetScsiStatusText(pReq->uStatus))); 863 LogFunc(("Response code: %s\n", virtioGetReqRespText(respHdr.uResponse))); 916 LogFunc(("Status: %s (0x%x%x) Response: %s (0x%x%x)\n", 917 virtioGetScsiStatusText(pReq->uStatus), pReq->uStatus >> 4 & 0xf, pReq->uStatus & 0xf, 918 virtioGetReqRespText(respHdr.uResponse), respHdr.uResponse >> 4 & 0xf, respHdr.uResponse & 0xf)); 864 919 865 920 if (pReq->cbSense) 866 LogFunc(("Sense: %.*Rhxs\n", pReq->cbSense, pReq->pbSense)); 921 { 922 Log2Func(("Sense: %s\n", SCSISenseText(pReq->pbSense[2]))); 923 Log2Func(("Sense Ext3: %s\n", SCSISenseExtText(pReq->pbSense[12], pReq->pbSense[12]))); 924 virtioScsiHexDump( pReq->pbSense, pReq->cbSense, 0, "\nSense"); 925 } 867 926 868 927 if (pReq->cbDataIn) 869 LogFunc(("Data In: %.*Rhxs\n", pReq->cbDataIn, pReq->pbDataIn));928 virtioScsiHexDump( pReq->pbDataIn, pReq->cbDataIn, 0, "\ndatain"); 870 929 871 930 if (pReq->cbPiIn) 872 LogFunc(("Pi In: %.*Rhxs\n", pReq->cbPiIn, pReq->pbPiIn)); 873 874 LogFunc(("Residual: %d\n", cbResidual)); 875 931 virtioScsiHexDump( pReq->pbPiIn, pReq->cbPiIn, 0, "\nPi in"); 932 933 if (cbResidual) 934 Log(("Residual: %d\n", cbResidual)); 935 936 Log(("---------------------------------------------------------------------------------\n")); 876 937 int cSegs = 0; 877 938 RTSGSEG aReqSegs[4]; … … 932 993 RT_NOREF(hIoReq); 933 994 PVIRTIOSCSITARGET pTarget = RT_FROM_MEMBER(pInterface, VIRTIOSCSITARGET, IMediaExPort); 934 virtioScsiR 3ReqComplete(pTarget->CTX_SUFF(pVirtioScsi), (PVIRTIOSCSIREQ)pvIoReqAlloc, rcReq);995 virtioScsiReqFinish(pTarget->CTX_SUFF(pVirtioScsi), (PVIRTIOSCSIREQ)pvIoReqAlloc, rcReq); 935 996 return VINF_SUCCESS; 936 997 } 937 998 938 static int virtioScsi SubmitReq(PVIRTIOSCSI pThis, uint16_t qIdx, PRTSGBUF pInSgBuf, PRTSGBUF pOutSgBuf)999 static int virtioScsiReqSubmit(PVIRTIOSCSI pThis, uint16_t qIdx, PRTSGBUF pInSgBuf, PRTSGBUF pOutSgBuf) 939 1000 { 940 1001 RT_NOREF(pInSgBuf); … … 976 1037 uint32_t uLUN = (pVirtqReq->cmdHdr.uLUN[2] << 8 | pVirtqReq->cmdHdr.uLUN[3]) & 0x3fff; 977 1038 978 LogFunc(("LUN: %.8Rhxs, (target:%d, lun:%d) id: %RX64, attr: %x, prio: %d, crn: %x\n" 979 " CDB: %.*Rhxs\n", 980 pVirtqReq->cmdHdr.uLUN, uTarget, uLUN, pVirtqReq->cmdHdr.uId, 981 pVirtqReq->cmdHdr.uTaskAttr, pVirtqReq->cmdHdr.uPrio, pVirtqReq->cmdHdr.uCrn, cbCdb, pbCdb)); 1039 LogFunc(("[%s] (Target: %d LUN: %d) CDB: %.*Rhxs\n", 1040 SCSICmdText(pbCdb[0]), uTarget, uLUN, 1041 virtioScsiEstimateCdbLen(pbCdb[0], pThis->virtioScsiConfig.uCdbSize), pbCdb)); 1042 1043 Log3Func((" id: %RX64, attr: %x, prio: %d, crn: %x\n", 1044 pVirtqReq->cmdHdr.uId, pVirtqReq->cmdHdr.uTaskAttr, pVirtqReq->cmdHdr.uPrio, pVirtqReq->cmdHdr.uCrn)); 982 1045 983 1046 if (uTarget >= pThis->cTargets) 984 1047 { 985 virtioScsiReq Complete(pThis, qIdx, VERR_IO_BAD_UNIT);1048 virtioScsiReqFinish(pThis, qIdx, VERR_IO_BAD_UNIT); 986 1049 return VINF_SUCCESS; 987 1050 } 988 1051 if (uLUN != 0) 989 1052 { 990 virtioScsiReq Complete(pThis, qIdx, VERR_IO_BAD_UNIT);1053 virtioScsiReqFinish(pThis, qIdx, VERR_IO_BAD_UNIT); 991 1054 return VINF_SUCCESS; 992 1055 } … … 1015 1078 1016 1079 if (cbDataOut) 1017 LogFunc(("dataout[]: %.*Rhxs\n", cbDataOut, pVirtqReq->uDataOut)); 1080 virtioScsiHexDump( pVirtqReq->uDataOut, cbDataOut, 0, "\ndataout"); 1081 1018 1082 1019 1083 if (cbPiOut) 1020 LogFunc(("pi_out[]: %.*Rhxs\n", cbPiOut, pVirtqReq->uPiOut));1084 virtioScsiHexDump(pVirtqReq->uPiOut, cbPiOut, 0, "\nPi out"); 1021 1085 1022 1086 PDMMEDIAEXIOREQ hIoReq = NULL; … … 1064 1128 } 1065 1129 1066 Log Func(("Submitting req (target=%d, LUN=%x)on %s\n", uTarget, uLUN, QUEUENAME(qIdx)));1130 Log3Func(("Submitting req on %s\n", uTarget, uLUN, QUEUENAME(qIdx))); 1067 1131 1068 1132 rc = pIMediaEx->pfnIoReqSendScsiCmd(pIMediaEx, pReq->hIoReq, uLUN, pbCdb, cbCdb, … … 1073 1137 { 1074 1138 pIMediaEx->pfnIoReqFree(pIMediaEx, hIoReq); 1075 virtioScsiReq Complete(pThis, qIdx, rc);1139 virtioScsiReqFinish(pThis, qIdx, rc); 1076 1140 return VINF_SUCCESS; 1077 1141 } 1078 1142 } else { 1079 virtioScsiReq Complete(pThis, qIdx, VERR_IO_NOT_READY);1143 virtioScsiReqFinish(pThis, qIdx, VERR_IO_NOT_READY); 1080 1144 return VINF_SUCCESS; 1081 1145 … … 1180 1244 virtioGetControlAsyncMaskText(szTypeText, sizeof(szTypeText), pScsiCtrlAnQuery->uEventsRequested); 1181 1245 1182 Log Func(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Query, types: %s\n",1246 Log2Func(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Query, types: %s\n", 1183 1247 QUEUENAME(qIdx), pScsiCtrlAnQuery->uLUN, CBQUEUENAME(qIdx) + 30, "", szTypeText)); 1184 1248 … … 1196 1260 1197 1261 if (pScsiCtrlAnSubscribe->uEventsRequested & ~SUBSCRIBABLE_EVENTS) 1198 Log (("Unsupported bits in event subscription event mask: 0x%x\n", pScsiCtrlAnSubscribe->uEventsRequested));1262 LogFunc(("Unsupported bits in event subscription event mask: 0x%x\n", pScsiCtrlAnSubscribe->uEventsRequested)); 1199 1263 1200 1264 char szTypeText[128]; 1201 1265 virtioGetControlAsyncMaskText(szTypeText, sizeof(szTypeText), pScsiCtrlAnSubscribe->uEventsRequested); 1202 1266 1203 Log Func(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Subscribe, types: %s\n",1267 Log2Func(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Subscribe, types: %s\n", 1204 1268 QUEUENAME(qIdx), pScsiCtrlAnSubscribe->uLUN, CBQUEUENAME(qIdx) + 30, "", szTypeText)); 1205 1269 … … 1221 1285 } 1222 1286 default: 1223 Log (("Unknown control type extracted from %s: %d\n", QUEUENAME(qIdx), pScsiCtrl->uType));1287 LogFunc(("Unknown control type extracted from %s: %d\n", QUEUENAME(qIdx), pScsiCtrl->uType)); 1224 1288 1225 1289 uResponse = VIRTIOSCSI_S_FAILURE; … … 1273 1337 if (!fNotificationSent) 1274 1338 { 1275 Log Func(("%s worker sleeping...\n", QUEUENAME(qIdx)));1339 Log3Func(("%s worker sleeping...\n", QUEUENAME(qIdx))); 1276 1340 Assert(ASMAtomicReadBool(&pWorker->fSleeping)); 1277 1341 rc = SUPSemEventWaitNoResume(pThis->pSupDrvSession, pWorker->hEvtProcess, RT_INDEFINITE_WAIT); … … 1279 1343 if (RT_UNLIKELY(pThread->enmState != PDMTHREADSTATE_RUNNING)) 1280 1344 break; 1281 Log Func(("%s worker woken\n", QUEUENAME(qIdx)));1345 Log3Func(("%s worker woken\n", QUEUENAME(qIdx))); 1282 1346 ASMAtomicWriteBool(&pWorker->fNotified, false); 1283 1347 } 1284 1348 ASMAtomicWriteBool(&pWorker->fSleeping, false); 1285 1349 } 1286 Log Func(("fetching next descriptor chain from %s\n", QUEUENAME(qIdx)));1350 Log3Func(("fetching next descriptor chain from %s\n", QUEUENAME(qIdx))); 1287 1351 rc = virtioQueueGet(pThis->hVirtio, qIdx, true, &pInSgBuf, &pOutSgBuf); 1288 1352 if (rc == VERR_NOT_AVAILABLE) 1289 1353 { 1290 Log Func(("Nothing found in %s\n", QUEUENAME(qIdx)));1354 Log2Func(("Nothing found in %s\n", QUEUENAME(qIdx))); 1291 1355 continue; 1292 1356 } … … 1296 1360 virtioScsiCtrl(pThis, qIdx, pInSgBuf, pOutSgBuf); 1297 1361 else 1298 virtioScsi SubmitReq(pThis, qIdx, pInSgBuf, pOutSgBuf);1362 virtioScsiReqSubmit(pThis, qIdx, pInSgBuf, pOutSgBuf); 1299 1363 } 1300 1364 return VINF_SUCCESS; … … 1505 1569 if (qIdx == CONTROLQ_IDX || IS_REQ_QUEUE(qIdx)) 1506 1570 { 1507 Log Func(("%s has available data\n", QUEUENAME(qIdx)));1571 Log3Func(("%s has available data\n", QUEUENAME(qIdx))); 1508 1572 /** Wake queue's worker thread up if sleeping */ 1509 1573 if (!ASMAtomicXchgBool(&pWorker->fNotified, true)) … … 1511 1575 if (ASMAtomicReadBool(&pWorker->fSleeping)) 1512 1576 { 1513 Log Func(("waking %s worker.\n", QUEUENAME(qIdx)));1577 Log3Func(("waking %s worker.\n", QUEUENAME(qIdx))); 1514 1578 int rc = SUPSemEventSignal(pThis->pSupDrvSession, pWorker->hEvtProcess); 1515 1579 AssertRC(rc); … … 1519 1583 else if (qIdx == EVENTQ_IDX) 1520 1584 { 1521 Log Func(("Driver queued buffer(s) to %s\n"));1585 Log3Func(("Driver queued buffer(s) to %s\n")); 1522 1586 if (ASMAtomicXchgBool(&pThis->fEventsMissed, false)) 1523 1587 virtioScsiReportEventsMissed(pThis, 0); … … 1529 1593 static DECLCALLBACK(void) virtioScsiStatusChanged(VIRTIOHANDLE hVirtio, void *pClient, bool fVirtioReady) 1530 1594 { 1531 LogFunc(("\n"));1532 1595 RT_NOREF(hVirtio); 1533 1596 PVIRTIOSCSI pThis = (PVIRTIOSCSI)pClient; … … 1535 1598 if (fVirtioReady) 1536 1599 { 1537 LogFunc(("VirtIO ready\n "));1600 LogFunc(("VirtIO ready\n---------------------------------------------------------------------------------")); 1538 1601 uint64_t features = virtioGetNegotiatedFeatures(hVirtio); 1539 1602 pThis->fHasT10pi = features & VIRTIO_SCSI_F_T10_PI; -
trunk/src/VBox/Devices/VirtIO/Virtio_1_0.cpp
r80499 r80522 81 81 if (pszDepiction[i] == ' ' && first++) 82 82 pszDepiction[i] = '.'; 83 Log (("%s: Guest %s %s 0x%s\n",83 Log3Func(("%s: Guest %s %s 0x%s\n", 84 84 pszFunc, fWrite ? "wrote" : "read ", pszDepiction, pszFormattedVal)); 85 85 } 86 86 else /* odd number or oversized access, ... log inline hex-dump style */ 87 87 { 88 Log (("%s: Guest %s %s%s[%d:%d]: %.*Rhxs\n",88 Log3Func(("%s: Guest %s %s%s[%d:%d]: %.*Rhxs\n", 89 89 pszFunc, fWrite ? "wrote" : "read ", pszMember, 90 90 pszIdx, uOffset, uOffset + cb, cb, pv)); … … 200 200 uint16_t uDescIdx = pDescChain->uHeadIdx; 201 201 202 Log 2Func(("%s DESC CHAIN: (head) desc_idx=%u [avail_idx=%u]\n",202 Log3Func(("%s DESC CHAIN: (head) desc_idx=%u [avail_idx=%u]\n", 203 203 pVirtqProxy->szVirtqName, pDescChain->uHeadIdx, pVirtqProxy->uAvailIdx)); 204 204 … … 238 238 if (desc.fFlags & VIRTQ_DESC_F_WRITE) 239 239 { 240 Log 2Func(("%s IN desc_idx=%u seg=%u addr=%RGp cb=%u\n",240 Log3Func(("%s IN desc_idx=%u seg=%u addr=%RGp cb=%u\n", 241 241 QUEUENAME(qIdx), uDescIdx, pDescChain->cSegsIn, desc.pGcPhysBuf, desc.cb)); 242 242 … … 245 245 else 246 246 { 247 Log 2Func(("%s OUT desc_idx=%u seg=%u addr=%RGp cb=%u\n",247 Log3Func(("%s OUT desc_idx=%u seg=%u addr=%RGp cb=%u\n", 248 248 QUEUENAME(qIdx), uDescIdx, pDescChain->cSegsOut, desc.pGcPhysBuf, desc.cb)); 249 249 pSeg = &(pDescChain->aSegsOut[pDescChain->cSegsOut++]); … … 264 264 *ppOutSegs = &pVirtqProxy->outSgBuf; 265 265 266 Log 2Func(("%s -- segs out: %u, segs in: %u --\n",266 Log3Func(("%s -- segs out: %u, segs in: %u --\n", 267 267 pVirtqProxy->szVirtqName, pDescChain->cSegsOut, pDescChain->cSegsIn)); 268 268 … … 290 290 size_t cbRemain = RTSgBufCalcTotalLength(pBufSrc); 291 291 uint16_t uUsedIdx = virtioReadUsedRingIdx(pVirtio, qIdx); 292 Log 2Func(("Copying client data to %s, desc chain (head desc_idx %d)\n",292 Log3Func(("Copying client data to %s, desc chain (head desc_idx %d)\n", 293 293 QUEUENAME(qIdx), uUsedIdx)); 294 294 295 while (cbRemain 295 while (cbRemain) 296 296 { 297 297 uint64_t dstSgStart = (uint64_t)pBufDst->paSegs[pBufDst->idxSeg].pvSeg; … … 326 326 pDescChain->uHeadIdx, 327 327 pDescChain->cSegsIn); 328 Log 2Func(("Copied %u bytes to %u byte buffer\n Write ahead used_idx=%d, %s used_idx=%d\n",328 Log3Func(("Copied %u bytes to %u byte buffer\n Write ahead used_idx=%d, %s used_idx=%d\n", 329 329 cbWritten, cbInSgBuf, pVirtqProxy->uUsedIdx, QUEUENAME(qIdx), uUsedIdx)); 330 330 return VINF_SUCCESS; … … 345 345 346 346 uint16_t uIdx = virtioReadUsedRingIdx(pVirtio, qIdx); 347 Log 2Func(("Updating %s used_idx from %u to %u\n",347 Log3Func(("Updating %s used_idx from %u to %u\n", 348 348 QUEUENAME(qIdx), uIdx, pVirtqProxy->uUsedIdx)); 349 349 … … 362 362 363 363 PVIRTQ_PROXY_T pVirtqProxy = &pVirtio->virtqProxy[qIdx]; 364 Log 2Func(("%s\n", pVirtqProxy->szVirtqName));364 Log3Func(("%s\n", pVirtqProxy->szVirtqName)); 365 365 366 366 … … 392 392 return; 393 393 } 394 Log 2Func(("...skipping interrupt: VIRTIO_F_EVENT_IDX set but threshold not reached\n"));394 Log3Func(("...skipping interrupt: VIRTIO_F_EVENT_IDX set but threshold not reached\n")); 395 395 } 396 396 else … … 402 402 return; 403 403 } 404 Log 2Func(("...skipping interrupt. Guest flagged VIRTQ_AVAIL_F_NO_INTERRUPT for queue\n"));404 Log3Func(("...skipping interrupt. Guest flagged VIRTQ_AVAIL_F_NO_INTERRUPT for queue\n")); 405 405 406 406 } … … 450 450 { 451 451 if (uCause == VIRTIO_ISR_VIRTQ_INTERRUPT) 452 Log FlowFunc(("reason: buffer added to 'used' ring.\n"));452 Log3Func(("reason: buffer added to 'used' ring.\n")); 453 453 else 454 454 if (uCause == VIRTIO_ISR_DEVICE_CONFIG) 455 Log FlowFunc(("reason: device config change\n"));455 Log3Func(("reason: device config change\n")); 456 456 457 457 pVirtio->uISR |= uCause; … … 636 636 { 637 637 pVirtio->uDeviceStatus = *(uint8_t *)pv; 638 Log 2Func(("Guest wrote uDeviceStatus ................ ("));638 Log3Func(("Guest wrote uDeviceStatus ................ (")); 639 639 virtioLogDeviceStatus(pVirtio->uDeviceStatus); 640 640 Log((")\n")); … … 653 653 else /* Guest READ pCommonCfg->uDeviceStatus */ 654 654 { 655 Log 2Func(("Guest read uDeviceStatus ................ ("));655 Log3Func(("Guest read uDeviceStatus ................ (")); 656 656 *(uint32_t *)pv = pVirtio->uDeviceStatus; 657 657 virtioLogDeviceStatus(pVirtio->uDeviceStatus); … … 758 758 { 759 759 ++pVirtio->uConfigGeneration; 760 Log 2Func(("Bumped cfg. generation to %d because %s%s\n",760 Log3Func(("Bumped cfg. generation to %d because %s%s\n", 761 761 pVirtio->uConfigGeneration, 762 762 fDevSpecificFieldChanged ? "<dev cfg changed> " : "", … … 775 775 { 776 776 *(uint8_t *)pv = pVirtio->uISR; 777 Log 2Func(("Read and clear ISR\n"));777 Log3Func(("Read and clear ISR\n")); 778 778 pVirtio->uISR = 0; /** VirtIO specification requires reads of ISR to clear it */ 779 779 virtioLowerInterrupt(pVirtio); 780 780 } 781 781 else { 782 Log 2Func(("Bad read access to mapped capabilities region:\n"782 LogFunc(("Bad read access to mapped capabilities region:\n" 783 783 " pVirtio=%#p GCPhysAddr=%RGp cb=%u\n", 784 784 pVirtio, GCPhysAddr, pv, cb, pv, cb)); -
trunk/src/VBox/Devices/VirtIO/Virtio_1_0.h
r80499 r80522 320 320 bool fWrite, bool fHasIndex, uint32_t idx); 321 321 322 322 323 #endif /* !VBOX_INCLUDED_SRC_VirtIO_Virtio_1_0_h */ -
trunk/src/VBox/Devices/VirtIO/Virtio_1_0_impl.h
r80499 r80522 517 517 int primed = 0; 518 518 if (status & VIRTIO_STATUS_ACKNOWLEDGE) 519 Log (("ACKNOWLEDGE", primed++));519 Log3(("ACKNOWLEDGE", primed++)); 520 520 if (status & VIRTIO_STATUS_DRIVER) 521 Log (("%sDRIVER", primed++ ? " | " : ""));521 Log3(("%sDRIVER", primed++ ? " | " : "")); 522 522 if (status & VIRTIO_STATUS_FEATURES_OK) 523 Log (("%sFEATURES_OK", primed++ ? " | " : ""));523 Log3(("%sFEATURES_OK", primed++ ? " | " : "")); 524 524 if (status & VIRTIO_STATUS_DRIVER_OK) 525 Log (("%sDRIVER_OK", primed++ ? " | " : ""));525 Log3(("%sDRIVER_OK", primed++ ? " | " : "")); 526 526 if (status & VIRTIO_STATUS_FAILED) 527 Log (("%sFAILED", primed++ ? " | " : ""));527 Log3(("%sFAILED", primed++ ? " | " : "")); 528 528 if (status & VIRTIO_STATUS_DEVICE_NEEDS_RESET) 529 Log (("%sNEEDS_RESET", primed++ ? " | " : ""));529 Log3(("%sNEEDS_RESET", primed++ ? " | " : "")); 530 530 } 531 531 }
Note:
See TracChangeset
for help on using the changeset viewer.