Changeset 2839 in vbox
- Timestamp:
- May 24, 2007 1:24:07 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 21469
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevATA.cpp
r2826 r2839 198 198 199 199 /** Enable passing through commands directly to the ATAPI drive. */ 200 bool fATAPIPassthrough;200 bool fATAPIPassthrough; 201 201 /** Number of errors we've reported to the release log. 202 202 * This is to prevent flooding caused by something going horribly wrong. 203 203 * this value against MAX_LOG_REL_ERRORS in places likely to cause floods 204 204 * like the ones we currently seeing on the linux smoke tests (2006-11-10). */ 205 uint32_t cErrors; 205 uint32_t cErrors; 206 /** Timestamp of last started command. 0 if no command pending. */ 207 uint64_t u64CmdTS; 206 208 207 209 /** Pointer to the attached driver's base interface. */ … … 3226 3228 break; 3227 3229 case ATA_IDLE_IMMEDIATE: 3230 LogRel(("PIIX3 ATA: LUN#%d: aborting current command\n", s->iLUN)); 3228 3231 ataAbortCurrentCommand(s, false); 3229 3232 break; … … 3244 3247 if (!s->fATAPI) 3245 3248 goto abort_cmd; 3249 LogRel(("PIIX3 ATA: LUN#%d: performing device RESET\n", s->iLUN)); 3246 3250 ataAbortCurrentCommand(s, true); 3247 3251 break; … … 3538 3542 #ifdef IN_RING3 3539 3543 /* Software RESET low to high */ 3540 LogRel(("PIIX3 ATA: Ctl#%d: RESET, DevSel=%d AIOIf=%d CmdIf0=%#04x CmdIf1=%#04x\n", 3544 uint32_t uCmdWait0 = -1, uCmdWait1 = -1; 3545 uint64_t uNow = RTTimeNanoTS(); 3546 if (pCtl->aIfs[0].u64CmdTS) 3547 uCmdWait0 = (pCtl->aIfs[0].u64CmdTS - uNow) / 1000; 3548 if (pCtl->aIfs[1].u64CmdTS) 3549 uCmdWait1 = (pCtl->aIfs[1].u64CmdTS - uNow) / 1000; 3550 LogRel(("PIIX3 ATA: Ctl#%d: RESET, DevSel=%d AIOIf=%d CmdIf0=%#04x (%d usec ago) CmdIf1=%#04x (%d usec ago)\n", 3541 3551 ATACONTROLLER_IDX(pCtl), pCtl->iSelectedIf, pCtl->iAIOIf, 3542 pCtl->aIfs[0].uATARegCommand, pCtl->aIfs[1].uATARegCommand)); 3552 pCtl->aIfs[0].uATARegCommand, uCmdWait0, 3553 pCtl->aIfs[1].uATARegCommand, uCmdWait1)); 3543 3554 pCtl->fReset = true; 3544 3555 /* Everything must be done after the reset flag is set, otherwise … … 4074 4085 s->iSourceSink = pReq->u.t.iSourceSink; 4075 4086 s->iIOBufferEnd = 0; 4087 s->u64CmdTS = u64TS; 4076 4088 4077 4089 pCtl->fChainedTransfer = false; … … 4294 4306 pCtl->uAsyncIOState = ATA_AIO_NEW; 4295 4307 pCtl->fReset = false; 4308 LogRel(("PIIX3 ATA: Ctl#%d: finished processing RESET\n", 4309 ATACONTROLLER_IDX(pCtl))); 4296 4310 for (uint32_t i = 0; i < RT_ELEMENTS(pCtl->aIfs); i++) 4297 4311 { … … 4345 4359 uWait = u64TS / 1000; 4346 4360 Log(("%s: Ctl#%d: LUN#%d finished I/O transaction in %d microseconds\n", __FUNCTION__, ATACONTROLLER_IDX(pCtl), pCtl->aIfs[pCtl->iAIOIf].iLUN, (uint32_t)(uWait))); 4361 /* Mark command as finished. */ 4362 pCtl->aIfs[pCtl->iAIOIf].u64CmdTS = 0; 4347 4363 4348 4364 /* … … 4353 4369 if (pCtl->aIfs[pCtl->iAIOIf].uATARegCommand != ATA_PACKET) 4354 4370 { 4355 if (uWait > 10* 1000 * 1000)4371 if (uWait > 8 * 1000 * 1000) 4356 4372 { 4357 4373 /* 4358 * Command took longer than 10seconds. This is close4374 * Command took longer than 8 seconds. This is close 4359 4375 * enough or over the guest's command timeout, so place 4360 4376 * an entry in the release log to allow tracking such … … 4994 5010 bool fVMLocked; 4995 5011 uint64_t u64Start; 5012 PATACONTROLLER pCtl; 4996 5013 bool fAllIdle = false; 4997 5014 … … 5016 5033 for (uint32_t i = 0; i < RT_ELEMENTS(pData->aCts); i++) 5017 5034 { 5018 fAllIdle &= ataAsyncIOIsIdle(&pData->aCts[i], false); 5035 pCtl = &pData->aCts[i]; 5036 fAllIdle &= ataAsyncIOIsIdle(pCtl, false); 5019 5037 if (!fAllIdle) 5020 5038 break; … … 5030 5048 if (fVMLocked) 5031 5049 pDevIns->pDevHlp->pfnLockVM(pDevIns); 5050 5051 if (!fAllIdle) 5052 LogRel(("PIIX3 ATA: Ctl#%d is still executing, DevSel=%d AIOIf=%d CmdIf0=%#04x CmdIf1=%#04x\n", 5053 ATACONTROLLER_IDX(pCtl), pCtl->iSelectedIf, pCtl->iAIOIf, 5054 pCtl->aIfs[0].uATARegCommand, pCtl->aIfs[1].uATARegCommand)); 5032 5055 5033 5056 return fAllIdle;
Note:
See TracChangeset
for help on using the changeset viewer.