30
30
#include <drm/ttm/ttm_resource.h>
31
31
#include <drm/ttm/ttm_range_manager.h>
32
32
33
- #include "amdgpu_vram_mgr.h"
34
-
35
33
/* state back for walking over vram_mgr and gtt_mgr allocations */
36
34
struct amdgpu_res_cursor {
37
35
uint64_t start ;
38
36
uint64_t size ;
39
37
uint64_t remaining ;
40
- void * node ;
41
- uint32_t mem_type ;
38
+ struct drm_mm_node * node ;
42
39
};
43
40
44
41
/**
@@ -55,63 +52,27 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
55
52
uint64_t start , uint64_t size ,
56
53
struct amdgpu_res_cursor * cur )
57
54
{
58
- struct drm_buddy_block * block ;
59
- struct list_head * head , * next ;
60
55
struct drm_mm_node * node ;
61
56
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 ;
99
60
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 ;
104
64
}
105
65
106
- return ;
66
+ BUG_ON ( start + size > res -> num_pages << PAGE_SHIFT ) ;
107
67
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 );
111
74
cur -> remaining = size ;
112
- cur -> node = NULL ;
113
- WARN_ON (res && start + size > res -> num_pages << PAGE_SHIFT );
114
- return ;
75
+ cur -> node = node ;
115
76
}
116
77
117
78
/**
@@ -124,9 +85,7 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
124
85
*/
125
86
static inline void amdgpu_res_next (struct amdgpu_res_cursor * cur , uint64_t size )
126
87
{
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 ;
130
89
131
90
BUG_ON (size > cur -> remaining );
132
91
@@ -140,27 +99,9 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
140
99
return ;
141
100
}
142
101
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 );
164
105
}
165
106
166
107
#endif
0 commit comments