From b8d23715f548afe7a700c2d8eb59e806e7bcf083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= Date: Sun, 19 Feb 2017 10:42:57 +0100 Subject: [PATCH] winsys/amdgpu: reduce max_alloc_size based on GTT limits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allocating huge buffers in VRAM is not a problem, but when those buffers start being migrated, the kernel runs into errors because it cannot split those buffer up for moving through GTT. This should fix intermittent failures of GL45-CTS.texture_buffer.texture_buffer_max_size Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Marek Olšák (cherry picked from commit 550125e1e73e2441989da11495057a20dd9dad44) [Emil Velikov: resolve trivial conflicts] Signed-off-by: Emil Velikov Conflicts: src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c --- src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index e944e62f0aa..573c5acff04 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -322,8 +322,10 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd) /* Set hardware information. */ ws->info.gart_size = gtt.heap_size; ws->info.vram_size = vram.heap_size; - /* The kernel can split large buffers, so we can do large allocations. */ - ws->info.max_alloc_size = MAX2(ws->info.vram_size, ws->info.gart_size) * 0.9; + /* The kernel can split large buffers in VRAM but not in GTT, so large + * allocations can fail or cause buffer movement failures in the kernel. + */ + ws->info.max_alloc_size = MIN2(ws->info.vram_size * 0.9, ws->info.gart_size * 0.7); /* convert the shader clock from KHz to MHz */ ws->info.max_shader_clock = ws->amdinfo.max_engine_clk / 1000; ws->info.max_se = ws->amdinfo.num_shader_engines;