r300RefillCurrentDmaRegion: Retry buffer acquisition only once, after
waiting for the engine to idle. There's no way for another buffer to become free anyway once the engine is idle.
This commit is contained in:
parent
8281cca82f
commit
3f22c0966d
|
@ -403,19 +403,24 @@ void r300RefillCurrentDmaRegion(r300ContextPtr rmesa)
|
|||
|
||||
LOCK_HARDWARE(&rmesa->radeon); /* no need to validate */
|
||||
|
||||
while (1) {
|
||||
ret = drmDMA(fd, &dma);
|
||||
if (ret == 0)
|
||||
break;
|
||||
ret = drmDMA(fd, &dma);
|
||||
|
||||
if (ret != 0) {
|
||||
/* Try to release some buffers and wait until we can't get any more */
|
||||
if (rmesa->dma.nr_released_bufs) {
|
||||
r300FlushCmdBufLocked(rmesa, __FUNCTION__);
|
||||
}
|
||||
|
||||
if (rmesa->radeon.do_usleeps) {
|
||||
if (RADEON_DEBUG & DEBUG_DMA)
|
||||
fprintf(stderr, "Waiting for buffers\n");
|
||||
|
||||
radeonWaitForIdleLocked(&rmesa->radeon);
|
||||
ret = drmDMA(fd, &dma);
|
||||
|
||||
if (ret != 0) {
|
||||
UNLOCK_HARDWARE(&rmesa->radeon);
|
||||
DO_USLEEP(1);
|
||||
LOCK_HARDWARE(&rmesa->radeon);
|
||||
fprintf(stderr, "Error: Could not get dma buffer... exiting\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue