From 4b3b25f0be33d3af3ccecfb3193fc2d365445fdf Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 6 Feb 2013 16:37:21 +0000 Subject: [PATCH] sna: Flush our caches if we fail to mmap an object The likely cause for a mmap failure is that we hold too many objects open or have exhausted our address space. In both cases, we need to trim our caches before continuing. Signed-off-by: Chris Wilson --- src/sna/kgem.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/sna/kgem.c b/src/sna/kgem.c index ae7ca10e..af4f0a81 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -292,6 +292,11 @@ retry_gtt: if (kgem_expire_cache(kgem)) goto retry_gtt; + if (kgem->need_expire) { + kgem_cleanup_cache(kgem); + goto retry_gtt; + } + return NULL; } @@ -304,6 +309,11 @@ retry_mmap: if (__kgem_throttle_retire(kgem, 0)) goto retry_mmap; + if (kgem->need_expire) { + kgem_cleanup_cache(kgem); + goto retry_mmap; + } + ptr = NULL; } @@ -4559,6 +4569,11 @@ retry: if (__kgem_throttle_retire(kgem, 0)) goto retry; + if (kgem->need_expire) { + kgem_cleanup_cache(kgem); + goto retry; + } + return NULL; } @@ -4594,6 +4609,11 @@ retry: if (__kgem_throttle_retire(kgem, 0)) goto retry; + if (kgem->need_expire) { + kgem_cleanup_cache(kgem); + goto retry; + } + return NULL; }