Module: Mesa
Branch: master
Commit: 84a38bfc29bd062bd1ba8aab834d8b42a3ff1a43
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=84a38bfc29bd062bd1ba8aab834d8b42a3ff1a43

Author: Marek Olšák <[email protected]>
Date:   Wed Dec  9 22:45:56 2015 +0100

winsys/radeon: clear the buffer cache on mmap failure and try again

Reviewed-by: Michel Dänzer <[email protected]>

---

 src/gallium/winsys/radeon/drm/radeon_drm_bo.c |   13 ++++++++++---
 1 file 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 b9716e5..ee61e54 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;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to