Changeset 66006 in vbox
- Timestamp:
- Mar 8, 2017 9:49:43 PM (8 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/Devices/Storage/DevATA.cpp (modified) (27 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevATA.cpp
r65997 r66006 1141 1141 1142 1142 # ifdef IN_RING3 1143 1144 /** 1145 * Enters the lock protecting the controller data against concurrent access. 1146 * 1147 * @returns nothing. 1148 * @param pCtl The controller to lock. 1149 */ 1150 DECLINLINE(void) ataR3LockEnter(PATACONTROLLER pCtl) 1151 { 1152 STAM_PROFILE_START(&pCtl->StatLockWait, a); 1153 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 1154 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 1155 } 1156 1157 /** 1158 * Leaves the lock protecting the controller against concurrent data access. 1159 * 1160 * @returns nothing. 1161 * @param pCtl The controller to unlock. 1162 */ 1163 DECLINLINE(void) ataR3LockLeave(PATACONTROLLER pCtl) 1164 { 1165 PDMCritSectLeave(&pCtl->lock); 1166 } 1143 1167 1144 1168 static uint32_t ataR3GetNSectors(ATADevState *s) … … 1360 1384 Assert(!s->cbElementaryTransfer); 1361 1385 1362 PDMCritSectLeave(&pCtl->lock);1386 ataR3LockLeave(pCtl); 1363 1387 1364 1388 STAM_PROFILE_START(&s->StatFlushes, f); … … 1367 1391 STAM_PROFILE_STOP(&s->StatFlushes, f); 1368 1392 1369 STAM_PROFILE_START(&pCtl->StatLockWait, a); 1370 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 1371 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 1393 ataR3LockEnter(pCtl); 1372 1394 ataR3CmdOK(s, 0); 1373 1395 return false; … … 1599 1621 int rc; 1600 1622 1601 PDMCritSectLeave(&pCtl->lock);1623 ataR3LockLeave(pCtl); 1602 1624 1603 1625 STAM_PROFILE_ADV_START(&s->StatReads, r); … … 1616 1638 *pfRedo = ataR3IsRedoSetWarning(s, rc); 1617 1639 1618 STAM_PROFILE_START(&pCtl->StatLockWait, a); 1619 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 1620 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 1640 ataR3LockEnter(pCtl); 1621 1641 return rc; 1622 1642 } … … 1629 1649 int rc; 1630 1650 1631 PDMCritSectLeave(&pCtl->lock);1651 ataR3LockLeave(pCtl); 1632 1652 1633 1653 STAM_PROFILE_ADV_START(&s->StatWrites, w); … … 1654 1674 *pfRedo = ataR3IsRedoSetWarning(s, rc); 1655 1675 1656 STAM_PROFILE_START(&pCtl->StatLockWait, a); 1657 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 1658 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 1676 ataR3LockEnter(pCtl); 1659 1677 return rc; 1660 1678 } … … 1829 1847 Log(("%s: %d sectors at LBA %d\n", __FUNCTION__, cSectors, s->iATAPILBA)); 1830 1848 1831 PDMCritSectLeave(&pCtl->lock);1849 ataR3LockLeave(pCtl); 1832 1850 1833 1851 STAM_PROFILE_ADV_START(&s->StatReads, r); … … 1875 1893 STAM_PROFILE_ADV_STOP(&s->StatReads, r); 1876 1894 1877 STAM_PROFILE_START(&pCtl->StatLockWait, a); 1878 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 1879 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 1895 ataR3LockEnter(pCtl); 1880 1896 1881 1897 if (RT_SUCCESS(rc)) … … 1944 1960 } 1945 1961 1946 PDMCritSectLeave(&pCtl->lock);1962 ataR3LockLeave(pCtl); 1947 1963 1948 1964 # if defined(LOG_ENABLED) … … 2017 2033 LogRel(("PIIX3 ATA: LUN#%d: CD-ROM passthrough split error\n", s->iLUN)); 2018 2034 atapiR3CmdErrorSimple(s, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_ILLEGAL_OPCODE); 2019 { 2020 STAM_PROFILE_START(&pCtl->StatLockWait, a); 2021 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 2022 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 2023 } 2035 ataR3LockEnter(pCtl); 2024 2036 return false; 2025 2037 } … … 2102 2114 if (pProf) { STAM_PROFILE_ADV_STOP(pProf, b); } 2103 2115 2104 STAM_PROFILE_START(&pCtl->StatLockWait, a); 2105 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 2106 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 2116 ataR3LockEnter(pCtl); 2107 2117 2108 2118 /* Update the LEDs and the read/write statistics. */ … … 3260 3270 PCIATAState *pThis = PDMINS_2_DATA(pDevIns, PCIATAState *); 3261 3271 3262 PDMCritSectLeave(&pCtl->lock);3272 ataR3LockLeave(pCtl); 3263 3273 rc = VMR3ReqPriorityCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY, 3264 3274 (PFNRT)s->pDrvMount->pfnUnmount, 3, … … 3272 3282 AssertRC(rc); 3273 3283 } 3274 { 3275 STAM_PROFILE_START(&pCtl->StatLockWait, a); 3276 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 3277 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 3278 } 3284 3285 ataR3LockEnter(pCtl); 3279 3286 break; 3280 3287 } … … 3639 3646 int rc; 3640 3647 3641 PDMCritSectLeave(&pCtl->lock);3648 ataR3LockLeave(pCtl); 3642 3649 3643 3650 TrimRange.offStart = u64Sector * s->cbSector; … … 3653 3660 *pfRedo = ataR3IsRedoSetWarning(s, rc); 3654 3661 3655 STAM_PROFILE_START(&pCtl->StatLockWait, a); 3656 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 3657 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 3662 ataR3LockEnter(pCtl); 3658 3663 return rc; 3659 3664 } … … 4221 4226 #ifdef IN_RING3 4222 4227 cBusy = 0; 4223 PDMCritSectLeave(&pCtl->lock);4228 ataR3LockLeave(pCtl); 4224 4229 4225 4230 #ifndef RT_OS_WINDOWS … … 4251 4256 RTThreadYield(); 4252 4257 4253 { 4254 STAM_PROFILE_START(&pCtl->StatLockWait, a); 4255 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 4256 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 4257 } 4258 ataR3LockEnter(pCtl); 4258 4259 4259 4260 val = s->uATARegStatus; … … 4970 4971 * necessary. This avoids long freezes should the guest access the 4971 4972 * ATA registers etc. for some reason. */ 4972 PDMCritSectLeave(&pCtl->lock);4973 ataR3LockLeave(pCtl); 4973 4974 4974 4975 Log2(("%s: %s tx_size=%d elem_tx_size=%d index=%d end=%d\n", … … 5028 5029 cbElementaryTransfer = cbTotalTransfer; 5029 5030 5030 { 5031 STAM_PROFILE_START(&pCtl->StatLockWait, a); 5032 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 5033 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 5034 } 5031 ataR3LockEnter(pCtl); 5035 5032 5036 5033 /* The RESET handler could have cleared the DMA transfer … … 5071 5068 } 5072 5069 5073 PDMCritSectLeave(&pCtl->lock);5070 ataR3LockLeave(pCtl); 5074 5071 if (RT_UNLIKELY(fRedo)) 5075 5072 break; … … 5084 5081 break; 5085 5082 5086 { 5087 STAM_PROFILE_START(&pCtl->StatLockWait, a); 5088 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 5089 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 5090 } 5083 ataR3LockEnter(pCtl); 5091 5084 5092 5085 if (!(pCtl->BmDma.u8Cmd & BM_CMD_START) || pCtl->fReset) … … 5099 5092 } 5100 5093 5101 PDMCritSectLeave(&pCtl->lock); 5102 } 5103 5104 { 5105 STAM_PROFILE_START(&pCtl->StatLockWait, a); 5106 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 5107 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 5108 } 5109 5094 ataR3LockLeave(pCtl); 5095 } 5096 5097 ataR3LockEnter(pCtl); 5110 5098 if (RT_UNLIKELY(fRedo)) 5111 5099 return; … … 5228 5216 5229 5217 /* Do our work. */ 5230 { 5231 STAM_PROFILE_START(&pCtl->StatLockWait, a); 5232 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS); 5233 STAM_PROFILE_STOP(&pCtl->StatLockWait, a); 5234 } 5218 ataR3LockEnter(pCtl); 5235 5219 5236 5220 if (pCtl->uAsyncIOState == ATA_AIO_NEW && !pCtl->fChainedTransfer) … … 5425 5409 * solution has been found. */ 5426 5410 Log(("%s: delay IRQ hack\n", __FUNCTION__)); 5427 PDMCritSectLeave(&pCtl->lock);5411 ataR3LockLeave(pCtl); 5428 5412 RTThreadSleep(pCtl->DelayIRQMillies); 5429 PDMCritSectEnter(&pCtl->lock, VINF_SUCCESS);5413 ataR3LockEnter(pCtl); 5430 5414 } 5431 5415 … … 5634 5618 } 5635 5619 5636 PDMCritSectLeave(&pCtl->lock);5620 ataR3LockLeave(pCtl); 5637 5621 } 5638 5622 … … 5779 5763 default: 5780 5764 AssertMsgFailed(("%s: Unsupported read from port %x size=%d\n", __FUNCTION__, Port, cb)); 5781 PDMCritSectLeave(&pCtl->lock);5782 return VERR_IOM_IOPORT_UNUSED;5765 rc = VERR_IOM_IOPORT_UNUSED; 5766 break; 5783 5767 } 5784 5768 PDMCritSectLeave(&pCtl->lock);
Note:
See TracChangeset
for help on using the changeset viewer.

