We have the BO pointer in the base structure now as well.
Unified · Split
| @@ -26,23 +26,12 @@ · 25 unmodified lines | ||
| 26 | 26 | |
| 27 | 27 | #include "amdgpu.h" |
| 28 | 28 | |
| 29 | −struct amdgpu_gtt_node { | |
| 30 | − struct ttm_buffer_object *tbo; | |
| 31 | − struct ttm_range_mgr_node base; | |
| 32 | −}; | |
| 33 | − | |
| 34 | 29 | static inline struct amdgpu_gtt_mgr * |
| 35 | 30 | to_gtt_mgr(struct ttm_resource_manager *man) |
| 36 | 31 | { |
| 37 | 32 | return container_of(man, struct amdgpu_gtt_mgr, manager); |
| 38 | 33 | } |
| 39 | 34 | |
| 40 | −static inline struct amdgpu_gtt_node * | |
| 41 | −to_amdgpu_gtt_node(struct ttm_resource *res) | |
| 42 | −{ | |
| 43 | − return container_of(res, struct amdgpu_gtt_node, base.base); | |
| 44 | −} | |
| 45 | − | |
| 46 | 35 | /** |
| 47 | 36 | * DOC: mem_info_gtt_total |
| 48 | 37 | * |
| @@ -106,9 +95,9 @@ const struct attribute_group amdgpu_gtt_mgr_attr_group = { · 57 unmodified lines | ||
| 106 | 95 | */ |
| 107 | 96 | bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_resource *res) |
| 108 | 97 | { |
| 109 | − struct amdgpu_gtt_node *node = to_amdgpu_gtt_node(res); | |
| 98 | + struct ttm_range_mgr_node *node = to_ttm_range_mgr_node(res); | |
| 110 | 99 | |
| 111 | − return drm_mm_node_allocated(&node->base.mm_nodes[0]); | |
| 100 | + return drm_mm_node_allocated(&node->mm_nodes[0]); | |
| 112 | 101 | } |
| 113 | 102 | |
| 114 | 103 | /** |
| @@ -128,15 +117,14 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man, · 13 unmodified lines | ||
| 128 | 117 | { |
| 129 | 118 | struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man); |
| 130 | 119 | uint32_t num_pages = PFN_UP(tbo->base.size); |
| 131 | − struct amdgpu_gtt_node *node; | |
| 120 | + struct ttm_range_mgr_node *node; | |
| 132 | 121 | int r; |
| 133 | 122 | |
| 134 | − node = kzalloc(struct_size(node, base.mm_nodes, 1), GFP_KERNEL); | |
| 123 | + node = kzalloc(struct_size(node, mm_nodes, 1), GFP_KERNEL); | |
| 135 | 124 | if (!node) |
| 136 | 125 | return -ENOMEM; |
| 137 | 126 | |
| 138 | − node->tbo = tbo; | |
| 139 | − ttm_resource_init(tbo, place, &node->base.base); | |
| 127 | + ttm_resource_init(tbo, place, &node->base); | |
| 140 | 128 | if (!(place->flags & TTM_PL_FLAG_TEMPORARY) && |
| 141 | 129 | ttm_resource_manager_usage(man) > man->size) { |
| 142 | 130 | r = -ENOSPC; |
| @@ -145,8 +133,7 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man, · 2 unmodified lines | ||
| 145 | 133 | |
| 146 | 134 | if (place->lpfn) { |
| 147 | 135 | spin_lock(&mgr->lock); |
| 148 | − r = drm_mm_insert_node_in_range(&mgr->mm, | |
| 149 | − &node->base.mm_nodes[0], | |
| 136 | + r = drm_mm_insert_node_in_range(&mgr->mm, &node->mm_nodes[0], | |
| 150 | 137 | num_pages, tbo->page_alignment, |
| 151 | 138 | 0, place->fpfn, place->lpfn, |
| 152 | 139 | DRM_MM_INSERT_BEST); |
| @@ -154,18 +141,18 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man, · 1 unmodified line | ||
| 154 | 141 | if (unlikely(r)) |
| 155 | 142 | goto err_free; |
| 156 | 143 | |
| 157 | − node->base.base.start = node->base.mm_nodes[0].start; | |
| 144 | + node->base.start = node->mm_nodes[0].start; | |
| 158 | 145 | } else { |
| 159 | − node->base.mm_nodes[0].start = 0; | |
| 160 | − node->base.mm_nodes[0].size = node->base.base.num_pages; | |
| 161 | − node->base.base.start = AMDGPU_BO_INVALID_OFFSET; | |
| 146 | + node->mm_nodes[0].start = 0; | |
| 147 | + node->mm_nodes[0].size = node->base.num_pages; | |
| 148 | + node->base.start = AMDGPU_BO_INVALID_OFFSET; | |
| 162 | 149 | } |
| 163 | 150 | |
| 164 | − *res = &node->base.base; | |
| 151 | + *res = &node->base; | |
| 165 | 152 | return 0; |
| 166 | 153 | |
| 167 | 154 | err_free: |
| 168 | − ttm_resource_fini(man, &node->base.base); | |
| 155 | + ttm_resource_fini(man, &node->base); | |
| 169 | 156 | kfree(node); |
| 170 | 157 | return r; |
| 171 | 158 | } |
| @@ -181,12 +168,12 @@ err_free: · 9 unmodified lines | ||
| 181 | 168 | static void amdgpu_gtt_mgr_del(struct ttm_resource_manager *man, |
| 182 | 169 | struct ttm_resource *res) |
| 183 | 170 | { |
| 184 | − struct amdgpu_gtt_node *node = to_amdgpu_gtt_node(res); | |
| 171 | + struct ttm_range_mgr_node *node = to_ttm_range_mgr_node(res); | |
| 185 | 172 | struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man); |
| 186 | 173 | |
| 187 | 174 | spin_lock(&mgr->lock); |
| 188 | − if (drm_mm_node_allocated(&node->base.mm_nodes[0])) | |
| 189 | − drm_mm_remove_node(&node->base.mm_nodes[0]); | |
| 175 | + if (drm_mm_node_allocated(&node->mm_nodes[0])) | |
| 176 | + drm_mm_remove_node(&node->mm_nodes[0]); | |
| 190 | 177 | spin_unlock(&mgr->lock); |
| 191 | 178 | |
| 192 | 179 | ttm_resource_fini(man, res); |
| @@ -202,7 +189,7 @@ static void amdgpu_gtt_mgr_del(struct ttm_resource_manager *man, · 9 unmodified lines | ||
| 202 | 189 | */ |
| 203 | 190 | int amdgpu_gtt_mgr_recover(struct amdgpu_gtt_mgr *mgr) |
| 204 | 191 | { |
| 205 | − struct amdgpu_gtt_node *node; | |
| 192 | + struct ttm_range_mgr_node *node; | |
| 206 | 193 | struct drm_mm_node *mm_node; |
| 207 | 194 | struct amdgpu_device *adev; |
| 208 | 195 | int r = 0; |
| @@ -210,8 +197,8 @@ int amdgpu_gtt_mgr_recover(struct amdgpu_gtt_mgr *mgr) · 1 unmodified line | ||
| 210 | 197 | adev = container_of(mgr, typeof(*adev), mman.gtt_mgr); |
| 211 | 198 | spin_lock(&mgr->lock); |
| 212 | 199 | drm_mm_for_each_node(mm_node, &mgr->mm) { |
| 213 | − node = container_of(mm_node, typeof(*node), base.mm_nodes[0]); | |
| 214 | − r = amdgpu_ttm_recover_gart(node->tbo); | |
| 200 | + node = container_of(mm_node, typeof(*node), mm_nodes[0]); | |
| 201 | + r = amdgpu_ttm_recover_gart(node->base.bo); | |
| 215 | 202 | if (r) |
| 216 | 203 | break; |
| 217 | 204 | } |
| @@ -355,6 +355,14 @@ ttm_resource_manager_next(struct ttm_resource_manager *man, · 354 unmodified lines | ||
| 355 | 355 | struct ttm_resource_cursor *cursor, |
| 356 | 356 | struct ttm_resource *res); |
| 357 | 357 | |
| 358 | +/** | |
| 359 | + * ttm_resource_manager_for_each_res - iterate over all resources | |
| 360 | + * @man: the resource manager | |
| 361 | + * @cursor: struct ttm_resource_cursor for the current position | |
| 362 | + * @res: the current resource | |
| 363 | + * | |
| 364 | + * Iterate over all the evictable resources in a resource manager. | |
| 365 | + */ | |
| 358 | 366 | #define ttm_resource_manager_for_each_res(man, cursor, res) \ |
| 359 | 367 | for (res = ttm_resource_manager_first(man, cursor); res; \ |
| 360 | 368 | res = ttm_resource_manager_next(man, cursor, res)) |