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 */
3634struct 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 */
12586static 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
0 commit comments