Skip to content

Commit 925b6e5

Browse files
arunpravin24ChristianKoenigAMD
authored andcommitted
Revert "drm/amdgpu: add drm buddy support to amdgpu"
This reverts commit c9cad93. This is part of a revert of the following commits: commit 708d19d ("drm/amdgpu: move internal vram_mgr function into the C file") commit 5e3f1e7 ("drm/amdgpu: fix start calculation in amdgpu_vram_mgr_new") commit c9cad93 ("drm/amdgpu: add drm buddy support to amdgpu") [WHY] Few users reported garbaged graphics as soon as x starts, reverting until this can be resolved. Signed-off-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220708093047.492662-3-Arunpravin.PaneerSelvam@amd.com Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Christian König <christian.koenig@amd.com>
1 parent b68277f commit 925b6e5

File tree

5 files changed

+176
-380
lines changed

5 files changed

+176
-380
lines changed

drivers/gpu/drm/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,6 @@ config DRM_AMDGPU
256256
select HWMON
257257
select BACKLIGHT_CLASS_DEVICE
258258
select INTERVAL_TREE
259-
select DRM_BUDDY
260259
help
261260
Choose this option if you have a recent AMD Radeon graphics card.
262261

drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h

Lines changed: 19 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,12 @@
3030
#include <drm/ttm/ttm_resource.h>
3131
#include <drm/ttm/ttm_range_manager.h>
3232

33-
#include "amdgpu_vram_mgr.h"
34-
3533
/* state back for walking over vram_mgr and gtt_mgr allocations */
3634
struct amdgpu_res_cursor {
3735
uint64_t start;
3836
uint64_t size;
3937
uint64_t remaining;
40-
void *node;
41-
uint32_t mem_type;
38+
struct drm_mm_node *node;
4239
};
4340

4441
/**
@@ -55,63 +52,27 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
5552
uint64_t start, uint64_t size,
5653
struct amdgpu_res_cursor *cur)
5754
{
58-
struct drm_buddy_block *block;
59-
struct list_head *head, *next;
6055
struct drm_mm_node *node;
6156

62-
if (!res)
63-
goto fallback;
64-
65-
BUG_ON(start + size > res->num_pages << PAGE_SHIFT);
66-
67-
cur->mem_type = res->mem_type;
68-
69-
switch (cur->mem_type) {
70-
case TTM_PL_VRAM:
71-
head = &to_amdgpu_vram_mgr_resource(res)->blocks;
72-
73-
block = list_first_entry_or_null(head,
74-
struct drm_buddy_block,
75-
link);
76-
if (!block)
77-
goto fallback;
78-
79-
while (start >= amdgpu_vram_mgr_block_size(block)) {
80-
start -= amdgpu_vram_mgr_block_size(block);
81-
82-
next = block->link.next;
83-
if (next != head)
84-
block = list_entry(next, struct drm_buddy_block, link);
85-
}
86-
87-
cur->start = amdgpu_vram_mgr_block_start(block) + start;
88-
cur->size = min(amdgpu_vram_mgr_block_size(block) - start, size);
89-
cur->remaining = size;
90-
cur->node = block;
91-
break;
92-
case TTM_PL_TT:
93-
node = to_ttm_range_mgr_node(res)->mm_nodes;
94-
while (start >= node->size << PAGE_SHIFT)
95-
start -= node++->size << PAGE_SHIFT;
96-
97-
cur->start = (node->start << PAGE_SHIFT) + start;
98-
cur->size = min((node->size << PAGE_SHIFT) - start, size);
57+
if (!res || res->mem_type == TTM_PL_SYSTEM) {
58+
cur->start = start;
59+
cur->size = size;
9960
cur->remaining = size;
100-
cur->node = node;
101-
break;
102-
default:
103-
goto fallback;
61+
cur->node = NULL;
62+
WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT);
63+
return;
10464
}
10565

106-
return;
66+
BUG_ON(start + size > res->num_pages << PAGE_SHIFT);
10767

108-
fallback:
109-
cur->start = start;
110-
cur->size = size;
68+
node = to_ttm_range_mgr_node(res)->mm_nodes;
69+
while (start >= node->size << PAGE_SHIFT)
70+
start -= node++->size << PAGE_SHIFT;
71+
72+
cur->start = (node->start << PAGE_SHIFT) + start;
73+
cur->size = min((node->size << PAGE_SHIFT) - start, size);
11174
cur->remaining = size;
112-
cur->node = NULL;
113-
WARN_ON(res && start + size > res->num_pages << PAGE_SHIFT);
114-
return;
75+
cur->node = node;
11576
}
11677

11778
/**
@@ -124,9 +85,7 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
12485
*/
12586
static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
12687
{
127-
struct drm_buddy_block *block;
128-
struct drm_mm_node *node;
129-
struct list_head *next;
88+
struct drm_mm_node *node = cur->node;
13089

13190
BUG_ON(size > cur->remaining);
13291

@@ -140,27 +99,9 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
14099
return;
141100
}
142101

143-
switch (cur->mem_type) {
144-
case TTM_PL_VRAM:
145-
block = cur->node;
146-
147-
next = block->link.next;
148-
block = list_entry(next, struct drm_buddy_block, link);
149-
150-
cur->node = block;
151-
cur->start = amdgpu_vram_mgr_block_start(block);
152-
cur->size = min(amdgpu_vram_mgr_block_size(block), cur->remaining);
153-
break;
154-
case TTM_PL_TT:
155-
node = cur->node;
156-
157-
cur->node = ++node;
158-
cur->start = node->start << PAGE_SHIFT;
159-
cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
160-
break;
161-
default:
162-
return;
163-
}
102+
cur->node = ++node;
103+
cur->start = node->start << PAGE_SHIFT;
104+
cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
164105
}
165106

166107
#endif

drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
#include <linux/dma-direction.h>
2828
#include <drm/gpu_scheduler.h>
29-
#include "amdgpu_vram_mgr.h"
3029
#include "amdgpu.h"
3130

3231
#define AMDGPU_PL_GDS (TTM_PL_PRIV + 0)
@@ -39,6 +38,15 @@
3938

4039
#define AMDGPU_POISON 0xd0bed0be
4140

41+
struct amdgpu_vram_mgr {
42+
struct ttm_resource_manager manager;
43+
struct drm_mm mm;
44+
spinlock_t lock;
45+
struct list_head reservations_pending;
46+
struct list_head reserved_pages;
47+
atomic64_t vis_usage;
48+
};
49+
4250
struct amdgpu_gtt_mgr {
4351
struct ttm_resource_manager manager;
4452
struct drm_mm mm;

0 commit comments

Comments
 (0)