Lines Matching defs:cursor

168  * @cursor: state to initialize
174 struct amdgpu_vm_pt_cursor *cursor)
176 cursor->pfn = start;
177 cursor->parent = NULL;
178 cursor->entry = &vm->root;
179 cursor->level = adev->vm_manager.root_level;
186 * @cursor: current state
193 struct amdgpu_vm_pt_cursor *cursor)
197 if ((cursor->level == AMDGPU_VM_PTB) || !cursor->entry ||
198 !cursor->entry->bo)
201 mask = amdgpu_vm_pt_entries_mask(adev, cursor->level);
202 shift = amdgpu_vm_pt_level_shift(adev, cursor->level);
204 ++cursor->level;
205 idx = (cursor->pfn >> shift) & mask;
206 cursor->parent = cursor->entry;
207 cursor->entry = &to_amdgpu_bo_vm(cursor->entry->bo)->entries[idx];
215 * @cursor: current state
222 struct amdgpu_vm_pt_cursor *cursor)
229 if (!cursor->parent)
233 shift = amdgpu_vm_pt_level_shift(adev, cursor->level - 1);
234 num_entries = amdgpu_vm_pt_num_entries(adev, cursor->level - 1);
235 parent = to_amdgpu_bo_vm(cursor->parent->bo);
237 if (cursor->entry == &parent->entries[num_entries - 1])
240 cursor->pfn += 1ULL << shift;
241 cursor->pfn &= ~((1ULL << shift) - 1);
242 ++cursor->entry;
249 * @cursor: current state
255 static bool amdgpu_vm_pt_ancestor(struct amdgpu_vm_pt_cursor *cursor)
257 if (!cursor->parent)
260 --cursor->level;
261 cursor->entry = cursor->parent;
262 cursor->parent = amdgpu_vm_pt_parent(cursor->parent);
270 * @cursor: current state
275 struct amdgpu_vm_pt_cursor *cursor)
278 if (amdgpu_vm_pt_descendant(adev, cursor))
282 while (!amdgpu_vm_pt_sibling(adev, cursor)) {
284 if (!amdgpu_vm_pt_ancestor(cursor)) {
285 cursor->pfn = ~0ll;
296 * @start: optional cursor to start with
297 * @cursor: state to initialize
304 struct amdgpu_vm_pt_cursor *cursor)
307 *cursor = *start;
309 amdgpu_vm_pt_start(adev, vm, 0, cursor);
311 while (amdgpu_vm_pt_descendant(adev, cursor))
334 * @cursor: current state
336 * Move the cursor to the next node in a deep first search.
339 struct amdgpu_vm_pt_cursor *cursor)
341 if (!cursor->entry)
344 if (!cursor->parent)
345 cursor->entry = NULL;
346 else if (amdgpu_vm_pt_sibling(adev, cursor))
347 while (amdgpu_vm_pt_descendant(adev, cursor))
350 amdgpu_vm_pt_ancestor(cursor);
356 #define for_each_amdgpu_vm_pt_dfs_safe(adev, vm, start, cursor, entry) \
357 for (amdgpu_vm_pt_first_dfs((adev), (vm), (start), &(cursor)), \
358 (entry) = (cursor).entry, amdgpu_vm_pt_next_dfs((adev), &(cursor));\
360 (entry) = (cursor).entry, amdgpu_vm_pt_next_dfs((adev), &(cursor)))
587 * @cursor: Which page table to allocate
598 struct amdgpu_vm_pt_cursor *cursor,
601 struct amdgpu_vm_bo_base *entry = cursor->entry;
610 r = amdgpu_vm_pt_create(adev, vm, cursor->level, immediate, &pt,
620 pt_bo->parent = amdgpu_bo_ref(cursor->parent->bo);
686 * @start: optional cursor where to start freeing PDs/PTs
696 struct amdgpu_vm_pt_cursor cursor;
701 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, start, cursor, entry)
711 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, start, cursor, entry)
944 struct amdgpu_vm_pt_cursor cursor;
954 amdgpu_vm_pt_start(adev, params->vm, start, &cursor);
955 while (cursor.pfn < end) {
965 &cursor, params->immediate);
970 shift = amdgpu_vm_pt_level_shift(adev, cursor.level);
971 parent_shift = amdgpu_vm_pt_level_shift(adev, cursor.level - 1);
974 if (amdgpu_vm_pt_descendant(adev, &cursor))
979 if (cursor.level != AMDGPU_VM_PTB) {
980 if (!amdgpu_vm_pt_descendant(adev, &cursor))
989 if (amdgpu_vm_pt_descendant(adev, &cursor))
995 if (!amdgpu_vm_pt_ancestor(&cursor))
1000 pt = cursor.entry->bo;
1009 if (!amdgpu_vm_pt_ancestor(&cursor))
1012 pt = cursor.entry->bo;
1020 mask = amdgpu_vm_pt_entries_mask(adev, cursor.level);
1021 pe_start = ((cursor.pfn >> shift) & mask) * 8;
1023 entry_end += cursor.pfn & ~(entry_end - 1);
1043 cursor.level, pe_start, dst,
1059 if (amdgpu_vm_pt_descendant(adev, &cursor)) {
1066 while (cursor.pfn < frag_start) {
1068 if (cursor.entry->bo) {
1071 &cursor,
1074 amdgpu_vm_pt_next(adev, &cursor);
1079 amdgpu_vm_pt_next(adev, &cursor);
1095 struct amdgpu_vm_pt_cursor cursor;
1098 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, NULL, cursor, entry) {