iris: Fall back to fresh allocations of mapping for zero-memset fails.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 26 May 2019 20:48:42 +0000 (13:48 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 30 May 2019 02:41:50 +0000 (19:41 -0700)
It is unlikely that we would fail to map a cached BO in order to zero
its contents.  When we did, we would free the first BO in the cache and
try again with the second.  It's possible that this next BO already had
a map setup, in which case we'd succeed.  But if it didn't, we'd likely
fail again in the same manner.

There's not much point in optimizing this case (and frankly, if we're
out of CPU-side VMA we should probably dump the cache entirely)...so
instead, just fall back to allocating a fresh BO from the kernel which
will already be zeroed so we don't have to try and map it.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/gallium/drivers/iris/iris_bufmgr.c

index e6c61a7a14cdbaf7f1f6a5578566cab9e2848832..659840c47aa1f9aaee97abf4bb87a3eb43b7cc47 100644 (file)
@@ -443,11 +443,12 @@ retry:
 
          if (zeroed) {
             void *map = iris_bo_map(NULL, bo, MAP_WRITE | MAP_RAW);
-            if (!map) {
+            if (map) {
+               memset(map, 0, bo_size);
+            } else {
+               alloc_from_cache = false;
                bo_free(bo);
-               goto retry;
             }
-            memset(map, 0, bo_size);
          }
       }
    }