intel: avoid deadlock in intel_bufmgr_fake.

main
Xiang, Haihao 2008-10-16 10:37:30 +08:00
parent 458e2d5bc5
commit 769197c8f1
1 changed files with 6 additions and 6 deletions

View File

@ -1053,12 +1053,10 @@ dri_fake_bo_unmap(dri_bo *bo)
} }
static void static void
dri_fake_kick_all(dri_bufmgr_fake *bufmgr_fake) dri_fake_kick_all_locked(dri_bufmgr_fake *bufmgr_fake)
{ {
struct block *block, *tmp; struct block *block, *tmp;
pthread_mutex_lock(&bufmgr_fake->lock);
bufmgr_fake->performed_rendering = 0; bufmgr_fake->performed_rendering = 0;
/* okay for ever BO that is on the HW kick it off. /* okay for ever BO that is on the HW kick it off.
seriously not afraid of the POLICE right now */ seriously not afraid of the POLICE right now */
@ -1073,7 +1071,6 @@ dri_fake_kick_all(dri_bufmgr_fake *bufmgr_fake)
bo_fake->dirty = 1; bo_fake->dirty = 1;
} }
pthread_mutex_unlock(&bufmgr_fake->lock);
} }
static int static int
@ -1358,7 +1355,7 @@ dri_fake_bo_exec(dri_bo *bo, int used,
if (bufmgr_fake->fail == 1) { if (bufmgr_fake->fail == 1) {
if (retry_count == 0) { if (retry_count == 0) {
retry_count++; retry_count++;
dri_fake_kick_all(bufmgr_fake); dri_fake_kick_all_locked(bufmgr_fake);
bufmgr_fake->fail = 0; bufmgr_fake->fail = 0;
goto restart; goto restart;
} else /* dump out the memory here */ } else /* dump out the memory here */
@ -1369,8 +1366,10 @@ dri_fake_bo_exec(dri_bo *bo, int used,
if (bufmgr_fake->exec != NULL) { if (bufmgr_fake->exec != NULL) {
int ret = bufmgr_fake->exec(bo, used, bufmgr_fake->exec_priv); int ret = bufmgr_fake->exec(bo, used, bufmgr_fake->exec_priv);
if (ret != 0) if (ret != 0) {
pthread_mutex_unlock(&bufmgr_fake->lock);
return ret; return ret;
}
} else { } else {
batch.start = bo->offset; batch.start = bo->offset;
batch.used = used; batch.used = used;
@ -1382,6 +1381,7 @@ dri_fake_bo_exec(dri_bo *bo, int used,
if (drmCommandWrite(bufmgr_fake->fd, DRM_I915_BATCHBUFFER, &batch, if (drmCommandWrite(bufmgr_fake->fd, DRM_I915_BATCHBUFFER, &batch,
sizeof(batch))) { sizeof(batch))) {
drmMsg("DRM_I915_BATCHBUFFER: %d\n", -errno); drmMsg("DRM_I915_BATCHBUFFER: %d\n", -errno);
pthread_mutex_unlock(&bufmgr_fake->lock);
return -errno; return -errno;
} }
} }