diff options
author | Marek Olšák <[email protected]> | 2015-12-09 22:45:56 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-12-11 15:25:13 +0100 |
commit | 84a38bfc29bd062bd1ba8aab834d8b42a3ff1a43 (patch) | |
tree | f2e5025dd8d9f7336e5765af0af8bb9b9601d61a | |
parent | eb1e1af676ae785cc4a1423a9ca35101c81f4eb8 (diff) |
winsys/radeon: clear the buffer cache on mmap failure and try again
Reviewed-by: Michel Dänzer <[email protected]>
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index b9716e50229..ee61e54803f 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -361,9 +361,16 @@ void *radeon_bo_do_map(struct radeon_bo *bo) ptr = os_mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, bo->rws->fd, args.addr_ptr); if (ptr == MAP_FAILED) { - pipe_mutex_unlock(bo->map_mutex); - fprintf(stderr, "radeon: mmap failed, errno: %i\n", errno); - return NULL; + /* Clear the cache and try again. */ + pb_cache_release_all_buffers(&bo->rws->bo_cache); + + ptr = os_mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, + bo->rws->fd, args.addr_ptr); + if (ptr == MAP_FAILED) { + pipe_mutex_unlock(bo->map_mutex); + fprintf(stderr, "radeon: mmap failed, errno: %i\n", errno); + return NULL; + } } bo->ptr = ptr; bo->map_count = 1; |