]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.7.3/drm-amdgpu-fix-lru-size-grouping-v2.patch
5.1-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.7.3 / drm-amdgpu-fix-lru-size-grouping-v2.patch
1 From 5661538749511d4c2f7d33e1e179f10c545b24d5 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
3 Date: Wed, 17 Aug 2016 13:44:20 +0200
4 Subject: drm/amdgpu: fix lru size grouping v2
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 From: Christian König <christian.koenig@amd.com>
10
11 commit 5661538749511d4c2f7d33e1e179f10c545b24d5 upstream.
12
13 Adding a BO can make it the insertion point for larger sizes as well.
14
15 v2: add a comment about the guard structure.
16
17 Signed-off-by: Christian König <christian.koenig@amd.com>
18 Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
19 Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
20 Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
22
23 ---
24 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++
25 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 8 ++++++++
26 2 files changed, 10 insertions(+)
27
28 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
29 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
30 @@ -415,6 +415,8 @@ struct amdgpu_mman {
31
32 /* custom LRU management */
33 struct amdgpu_mman_lru log2_size[AMDGPU_TTM_LRU_SIZE];
34 + /* guard for log2_size array, don't add anything in between */
35 + struct amdgpu_mman_lru guard;
36 };
37
38 int amdgpu_copy_buffer(struct amdgpu_ring *ring,
39 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
40 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
41 @@ -943,6 +943,8 @@ static struct list_head *amdgpu_ttm_lru_
42 struct list_head *res = lru->lru[tbo->mem.mem_type];
43
44 lru->lru[tbo->mem.mem_type] = &tbo->lru;
45 + while ((++lru)->lru[tbo->mem.mem_type] == res)
46 + lru->lru[tbo->mem.mem_type] = &tbo->lru;
47
48 return res;
49 }
50 @@ -953,6 +955,8 @@ static struct list_head *amdgpu_ttm_swap
51 struct list_head *res = lru->swap_lru;
52
53 lru->swap_lru = &tbo->swap;
54 + while ((++lru)->swap_lru == res)
55 + lru->swap_lru = &tbo->swap;
56
57 return res;
58 }
59 @@ -1004,6 +1008,10 @@ int amdgpu_ttm_init(struct amdgpu_device
60 lru->swap_lru = &adev->mman.bdev.glob->swap_lru;
61 }
62
63 + for (j = 0; j < TTM_NUM_MEM_TYPES; ++j)
64 + adev->mman.guard.lru[j] = NULL;
65 + adev->mman.guard.swap_lru = NULL;
66 +
67 adev->mman.initialized = true;
68 r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,
69 adev->mc.real_vram_size >> PAGE_SHIFT);