Changeset 87811 in vbox
- Timestamp:
- Feb 19, 2021 4:56:39 PM (4 years ago)
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 3 edited
-
DevHDA.cpp (modified) (11 diffs)
-
HDAStream.cpp (modified) (7 diffs)
-
HDAStream.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHDA.cpp
r87809 r87811 1387 1387 LogFunc(("[SD%RU8] Reset enter\n", uSD)); 1388 1388 1389 hda R3StreamLock(pStreamR3);1389 hdaStreamLock(pStreamShared); 1390 1390 1391 1391 # ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO … … 1400 1400 hdaR3StreamAsyncIOUnlock(pStreamR3); 1401 1401 # endif 1402 hda R3StreamUnlock(pStreamR3);1402 hdaStreamUnlock(pStreamShared); 1403 1403 } 1404 1404 else … … 1412 1412 LogFunc(("[SD%RU8] State changed (fRun=%RTbool)\n", uSD, fRun)); 1413 1413 1414 hda R3StreamLock(pStreamR3);1414 hdaStreamLock(pStreamShared); 1415 1415 1416 1416 int rc2 = VINF_SUCCESS; … … 1506 1506 # endif 1507 1507 /* Make sure to leave the lock before (eventually) starting the timer. */ 1508 hda R3StreamUnlock(pStreamR3);1508 hdaStreamUnlock(pStreamShared); 1509 1509 } 1510 1510 } … … 1526 1526 AssertReturn(uSD < RT_ELEMENTS(pThis->aStreams), VERR_INTERNAL_ERROR_3); /* paranoia^2: Bad g_aHdaRegMap. */ 1527 1527 PHDASTATER3 const pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PHDASTATER3); 1528 PHDASTREAMR3 const pStreamR3 = &pThisCC->aStreams[uSD];1529 1528 PHDASTREAM const pStreamShared = &pThis->aStreams[uSD]; 1530 1529 … … 1539 1538 } 1540 1539 1541 hda R3StreamLock(pStreamR3);1540 hdaStreamLock(pStreamShared); 1542 1541 1543 1542 uint32_t v = HDA_REG_IND(pThis, iReg); … … 1625 1624 if (cTransferTicks) 1626 1625 PDMDevHlpTimerUnlockClock(pDevIns, pStreamShared->hTimer); /* Caller will unlock pThis->CritSect. */ 1627 hda R3StreamUnlock(pStreamR3);1626 hdaStreamUnlock(pStreamShared); 1628 1627 return VINF_SUCCESS; 1629 1628 #else /* !IN_RING3 */ … … 2707 2706 pSink->pMixSink->pszName, pSink->pStreamShared->u8SD, pSink->pStreamShared->u8Channel)); 2708 2707 2709 hda R3StreamLock(pSink->pStreamR3);2708 hdaStreamLock(pSink->pStreamShared); 2710 2709 2711 2710 /* Only disable the stream if the stream descriptor # has changed. */ … … 2715 2714 pSink->pStreamR3->pMixSink = NULL; 2716 2715 2717 hda R3StreamUnlock(pSink->pStreamR3);2716 hdaStreamUnlock(pSink->pStreamShared); 2718 2717 2719 2718 pSink->pStreamShared = NULL; … … 2730 2729 PHDASTREAMR3 pStreamR3 = &pThisCC->aStreams[uSD]; 2731 2730 PHDASTREAM pStreamShared = &pThis->aStreams[uSD]; 2732 hda R3StreamLock(pStreamR3);2731 hdaStreamLock(pStreamShared); 2733 2732 2734 2733 pSink->pStreamR3 = pStreamR3; … … 2738 2737 pStreamR3->pMixSink = pSink; 2739 2738 2740 hda R3StreamUnlock(pStreamR3);2739 hdaStreamUnlock(pStreamShared); 2741 2740 rc = VINF_SUCCESS; 2742 2741 } -
trunk/src/VBox/Devices/Audio/HDAStream.cpp
r87809 r87811 75 75 #endif 76 76 77 # ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 78 rc = RTCritSectInit(&pStreamR3->CritSect); 77 #ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 78 AssertPtr(pStreamR3->pHDAStateR3); 79 AssertPtr(pStreamR3->pHDAStateR3->pDevIns); 80 rc = PDMDevHlpCritSectInit(pStreamR3->pHDAStateR3->pDevIns, &pStreamShared->CritSect, 81 RT_SRC_POS, "hda_sd#%RU8", pStreamShared->u8SD); 79 82 AssertRCReturn(rc, rc); 80 # endif83 #endif 81 84 82 85 rc = hdaR3StreamPeriodCreate(&pStreamShared->State.Period); … … 175 178 #endif 176 179 177 # ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO178 if ( RTCritSectIsInitialized(&pStreamR3->CritSect))179 { 180 rc2 = RTCritSectDelete(&pStreamR3->CritSect);180 #ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 181 if (PDMCritSectIsInitialized(&pStreamShared->CritSect)) 182 { 183 rc2 = PDMR3CritSectDelete(&pStreamShared->CritSect); 181 184 AssertRC(rc2); 182 185 } 183 # endif186 #endif 184 187 185 188 if (pStreamR3->State.pCircBuf) … … 1096 1099 1097 1100 uint8_t const uSD = pStreamShared->u8SD; 1098 hda R3StreamLock(pStreamR3);1101 hdaStreamLock(pStreamShared); 1099 1102 1100 1103 PHDASTREAMPERIOD pPeriod = &pStreamShared->State.Period; … … 1121 1124 if (!fProceed) 1122 1125 { 1123 hda R3StreamUnlock(pStreamR3);1126 hdaStreamUnlock(pStreamShared); 1124 1127 return VINF_SUCCESS; 1125 1128 } … … 1581 1584 LogFlowFuncLeave(); 1582 1585 1583 hda R3StreamUnlock(pStreamR3);1586 hdaStreamUnlock(pStreamShared); 1584 1587 1585 1588 return VINF_SUCCESS; … … 1788 1791 * 1789 1792 * @returns IPRT status code. 1790 * @param pStream R3 HDA stream to lock (ring-3bits).1791 */ 1792 void hda R3StreamLock(PHDASTREAMR3 pStreamR3)1793 { 1794 AssertPtrReturnVoid(pStream R3);1793 * @param pStreamShared HDA stream to lock (shared bits). 1794 */ 1795 void hdaStreamLock(PHDASTREAM pStreamShared) 1796 { 1797 AssertPtrReturnVoid(pStreamShared); 1795 1798 # ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 1796 int rc2 = RTCritSectEnter(&pStreamR3->CritSect);1799 int rc2 = PDMCritSectEnter(&pStreamShared->CritSect, VINF_SUCCESS); 1797 1800 AssertRC(rc2); 1798 # else 1799 Assert(PDMDevHlpCritSectIsOwner(pStream->pHDAState->pDevInsR3, pStream->pHDAState->CritSect)); 1800 # endif 1801 #endif 1801 1802 } 1802 1803 … … 1805 1806 * 1806 1807 * @returns IPRT status code. 1807 * @param pStream R3 HDA stream to unlock (ring-3bits).1808 */ 1809 void hda R3StreamUnlock(PHDASTREAMR3 pStreamR3)1810 { 1811 AssertPtrReturnVoid(pStream R3);1808 * @param pStreamShared HDA stream to unlock (shared bits). 1809 */ 1810 void hdaStreamUnlock(PHDASTREAM pStreamShared) 1811 { 1812 AssertPtrReturnVoid(pStreamShared); 1812 1813 # ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 1813 int rc2 = RTCritSectLeave(&pStreamR3->CritSect);1814 int rc2 = PDMCritSectLeave(&pStreamShared->CritSect); 1814 1815 AssertRC(rc2); 1815 1816 # endif -
trunk/src/VBox/Devices/Audio/HDAStream.h
r87758 r87811 191 191 uint8_t u8Channel; 192 192 uint8_t abPadding0[6]; 193 #ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO 194 /** The stream's shared r0/r3 critical section to serialize access between the async I/O 195 * thread and (basically) the guest. */ 196 PDMCRITSECT CritSect; 197 #endif 193 198 /** DMA base address (SDnBDPU - SDnBDPL). 194 199 * Will be updated in hdaR3StreamInit(). */ … … 238 243 /** Pointer to HDA sink this stream is attached to. */ 239 244 R3PTRTYPE(PHDAMIXERSINK) pMixSink; 240 #ifdef VBOX_WITH_AUDIO_HDA_ASYNC_IO241 /** The stream's critical section to serialize access between the async I/O242 * thread and (basically) the guest. */243 RTCRITSECT CritSect;244 #endif245 245 /** Internal state of this stream. */ 246 246 struct … … 281 281 bool hdaR3StreamTransferIsScheduled(PHDASTREAM pStreamShared, uint64_t tsNow); 282 282 uint64_t hdaR3StreamTransferGetNext(PHDASTREAM pStreamShared); 283 void hda R3StreamLock(PHDASTREAMR3 pStreamR3);284 void hda R3StreamUnlock(PHDASTREAMR3 pStreamR3);283 void hdaStreamLock(PHDASTREAM pStreamShared); 284 void hdaStreamUnlock(PHDASTREAM pStreamShared); 285 285 void hdaR3StreamUpdate(PPDMDEVINS pDevIns, PHDASTATE pThis, PHDASTATER3 pThisCC, 286 286 PHDASTREAM pStreamShared, PHDASTREAMR3 pStreamR3, bool fInTimer);
Note:
See TracChangeset
for help on using the changeset viewer.

