summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Haehnle <prefect_@gmx.net>2005-02-18 18:57:38 +0000
committerNicolai Haehnle <prefect_@gmx.net>2005-02-18 18:57:38 +0000
commit3f22c0966dcc26b3a8310afd8baa238ab857b611 (patch)
tree1195df2a5e4999b8f557c174da5dbf2a53db86f9
parent8281cca82fb89001edd3e2360202e358bdc6bda7 (diff)
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.
-rw-r--r--src/mesa/drivers/dri/r300/r300_ioctl.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c
index e8e044eab1..de21bfc81b 100644
--- a/src/mesa/drivers/dri/r300/r300_ioctl.c
+++ b/src/mesa/drivers/dri/r300/r300_ioctl.c
@@ -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);
}
}