Lines Matching refs:cursor
159 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_start() argument
161 cursor->pfn = start; in amdgpu_vm_pt_start()
162 cursor->parent = NULL; in amdgpu_vm_pt_start()
163 cursor->entry = &vm->root; in amdgpu_vm_pt_start()
164 cursor->level = adev->vm_manager.root_level; in amdgpu_vm_pt_start()
178 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_descendant() argument
182 if ((cursor->level == AMDGPU_VM_PTB) || !cursor->entry || in amdgpu_vm_pt_descendant()
183 !cursor->entry->bo) in amdgpu_vm_pt_descendant()
186 mask = amdgpu_vm_pt_entries_mask(adev, cursor->level); in amdgpu_vm_pt_descendant()
187 shift = amdgpu_vm_pt_level_shift(adev, cursor->level); in amdgpu_vm_pt_descendant()
189 ++cursor->level; in amdgpu_vm_pt_descendant()
190 idx = (cursor->pfn >> shift) & mask; in amdgpu_vm_pt_descendant()
191 cursor->parent = cursor->entry; in amdgpu_vm_pt_descendant()
192 cursor->entry = &to_amdgpu_bo_vm(cursor->entry->bo)->entries[idx]; in amdgpu_vm_pt_descendant()
207 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_sibling() argument
214 if (!cursor->parent) in amdgpu_vm_pt_sibling()
218 shift = amdgpu_vm_pt_level_shift(adev, cursor->level - 1); in amdgpu_vm_pt_sibling()
219 num_entries = amdgpu_vm_pt_num_entries(adev, cursor->level - 1); in amdgpu_vm_pt_sibling()
220 parent = to_amdgpu_bo_vm(cursor->parent->bo); in amdgpu_vm_pt_sibling()
222 if (cursor->entry == &parent->entries[num_entries - 1]) in amdgpu_vm_pt_sibling()
225 cursor->pfn += 1ULL << shift; in amdgpu_vm_pt_sibling()
226 cursor->pfn &= ~((1ULL << shift) - 1); in amdgpu_vm_pt_sibling()
227 ++cursor->entry; in amdgpu_vm_pt_sibling()
240 static bool amdgpu_vm_pt_ancestor(struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_ancestor() argument
242 if (!cursor->parent) in amdgpu_vm_pt_ancestor()
245 --cursor->level; in amdgpu_vm_pt_ancestor()
246 cursor->entry = cursor->parent; in amdgpu_vm_pt_ancestor()
247 cursor->parent = amdgpu_vm_pt_parent(cursor->parent); in amdgpu_vm_pt_ancestor()
260 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_next() argument
263 if (amdgpu_vm_pt_descendant(adev, cursor)) in amdgpu_vm_pt_next()
267 while (!amdgpu_vm_pt_sibling(adev, cursor)) { in amdgpu_vm_pt_next()
269 if (!amdgpu_vm_pt_ancestor(cursor)) { in amdgpu_vm_pt_next()
270 cursor->pfn = ~0ll; in amdgpu_vm_pt_next()
289 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_first_dfs() argument
292 *cursor = *start; in amdgpu_vm_pt_first_dfs()
294 amdgpu_vm_pt_start(adev, vm, 0, cursor); in amdgpu_vm_pt_first_dfs()
296 while (amdgpu_vm_pt_descendant(adev, cursor)) in amdgpu_vm_pt_first_dfs()
324 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_next_dfs() argument
326 if (!cursor->entry) in amdgpu_vm_pt_next_dfs()
329 if (!cursor->parent) in amdgpu_vm_pt_next_dfs()
330 cursor->entry = NULL; in amdgpu_vm_pt_next_dfs()
331 else if (amdgpu_vm_pt_sibling(adev, cursor)) in amdgpu_vm_pt_next_dfs()
332 while (amdgpu_vm_pt_descendant(adev, cursor)) in amdgpu_vm_pt_next_dfs()
335 amdgpu_vm_pt_ancestor(cursor); in amdgpu_vm_pt_next_dfs()
341 #define for_each_amdgpu_vm_pt_dfs_safe(adev, vm, start, cursor, entry) \ argument
342 for (amdgpu_vm_pt_first_dfs((adev), (vm), (start), &(cursor)), \
343 (entry) = (cursor).entry, amdgpu_vm_pt_next_dfs((adev), &(cursor));\
345 (entry) = (cursor).entry, amdgpu_vm_pt_next_dfs((adev), &(cursor)))
497 struct amdgpu_vm_pt_cursor *cursor, in amdgpu_vm_pt_alloc() argument
500 struct amdgpu_vm_bo_base *entry = cursor->entry; in amdgpu_vm_pt_alloc()
509 r = amdgpu_vm_pt_create(adev, vm, cursor->level, immediate, &pt, in amdgpu_vm_pt_alloc()
519 pt_bo->parent = amdgpu_bo_ref(cursor->parent->bo); in amdgpu_vm_pt_alloc()
587 struct amdgpu_vm_pt_cursor *cursor) in amdgpu_vm_pt_add_list() argument
593 for_each_amdgpu_vm_pt_dfs_safe(params->adev, params->vm, cursor, seek, entry) { in amdgpu_vm_pt_add_list()
599 list_move(&cursor->entry->vm_status, ¶ms->tlb_flush_waitlist); in amdgpu_vm_pt_add_list()
612 struct amdgpu_vm_pt_cursor cursor; in amdgpu_vm_pt_free_root() local
615 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, NULL, cursor, entry) { in amdgpu_vm_pt_free_root()
802 struct amdgpu_vm_pt_cursor cursor; in amdgpu_vm_ptes_update() local
812 amdgpu_vm_pt_start(adev, params->vm, start, &cursor); in amdgpu_vm_ptes_update()
813 while (cursor.pfn < end) { in amdgpu_vm_ptes_update()
823 &cursor, params->immediate); in amdgpu_vm_ptes_update()
828 shift = amdgpu_vm_pt_level_shift(adev, cursor.level); in amdgpu_vm_ptes_update()
829 parent_shift = amdgpu_vm_pt_level_shift(adev, cursor.level - 1); in amdgpu_vm_ptes_update()
832 if (amdgpu_vm_pt_descendant(adev, &cursor)) in amdgpu_vm_ptes_update()
837 if (cursor.level != AMDGPU_VM_PTB) { in amdgpu_vm_ptes_update()
838 if (!amdgpu_vm_pt_descendant(adev, &cursor)) in amdgpu_vm_ptes_update()
847 if (amdgpu_vm_pt_descendant(adev, &cursor)) in amdgpu_vm_ptes_update()
853 if (!amdgpu_vm_pt_ancestor(&cursor)) in amdgpu_vm_ptes_update()
858 pt = cursor.entry->bo; in amdgpu_vm_ptes_update()
867 if (!amdgpu_vm_pt_ancestor(&cursor)) in amdgpu_vm_ptes_update()
870 pt = cursor.entry->bo; in amdgpu_vm_ptes_update()
878 mask = amdgpu_vm_pt_entries_mask(adev, cursor.level); in amdgpu_vm_ptes_update()
879 pe_start = ((cursor.pfn >> shift) & mask) * 8; in amdgpu_vm_ptes_update()
881 if (cursor.level < AMDGPU_VM_PTB && params->unlocked) in amdgpu_vm_ptes_update()
889 entry_end += cursor.pfn & ~(entry_end - 1); in amdgpu_vm_ptes_update()
909 cursor.level, pe_start, dst, in amdgpu_vm_ptes_update()
925 if (amdgpu_vm_pt_descendant(adev, &cursor)) { in amdgpu_vm_ptes_update()
932 while (cursor.pfn < frag_start) { in amdgpu_vm_ptes_update()
934 if (cursor.entry->bo) { in amdgpu_vm_ptes_update()
936 amdgpu_vm_pt_add_list(params, &cursor); in amdgpu_vm_ptes_update()
938 amdgpu_vm_pt_next(adev, &cursor); in amdgpu_vm_ptes_update()
943 amdgpu_vm_pt_next(adev, &cursor); in amdgpu_vm_ptes_update()
959 struct amdgpu_vm_pt_cursor cursor; in amdgpu_vm_pt_map_tables() local
962 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, NULL, cursor, entry) { in amdgpu_vm_pt_map_tables()