Lines Matching refs:iter
11 static void tdp_iter_refresh_sptep(struct tdp_iter *iter) in tdp_iter_refresh_sptep() argument
13 iter->sptep = iter->pt_path[iter->level - 1] + in tdp_iter_refresh_sptep()
14 SHADOW_PT_INDEX(iter->gfn << PAGE_SHIFT, iter->level); in tdp_iter_refresh_sptep()
15 iter->old_spte = READ_ONCE(*iter->sptep); in tdp_iter_refresh_sptep()
27 void tdp_iter_start(struct tdp_iter *iter, u64 *root_pt, int root_level, in tdp_iter_start() argument
33 iter->next_last_level_gfn = next_last_level_gfn; in tdp_iter_start()
34 iter->yielded_gfn = iter->next_last_level_gfn; in tdp_iter_start()
35 iter->root_level = root_level; in tdp_iter_start()
36 iter->min_level = min_level; in tdp_iter_start()
37 iter->level = root_level; in tdp_iter_start()
38 iter->pt_path[iter->level - 1] = root_pt; in tdp_iter_start()
40 iter->gfn = round_gfn_for_level(iter->next_last_level_gfn, iter->level); in tdp_iter_start()
41 tdp_iter_refresh_sptep(iter); in tdp_iter_start()
43 iter->valid = true; in tdp_iter_start()
67 static bool try_step_down(struct tdp_iter *iter) in try_step_down() argument
71 if (iter->level == iter->min_level) in try_step_down()
78 iter->old_spte = READ_ONCE(*iter->sptep); in try_step_down()
80 child_pt = spte_to_child_pt(iter->old_spte, iter->level); in try_step_down()
84 iter->level--; in try_step_down()
85 iter->pt_path[iter->level - 1] = child_pt; in try_step_down()
86 iter->gfn = round_gfn_for_level(iter->next_last_level_gfn, iter->level); in try_step_down()
87 tdp_iter_refresh_sptep(iter); in try_step_down()
99 static bool try_step_side(struct tdp_iter *iter) in try_step_side() argument
105 if (SHADOW_PT_INDEX(iter->gfn << PAGE_SHIFT, iter->level) == in try_step_side()
109 iter->gfn += KVM_PAGES_PER_HPAGE(iter->level); in try_step_side()
110 iter->next_last_level_gfn = iter->gfn; in try_step_side()
111 iter->sptep++; in try_step_side()
112 iter->old_spte = READ_ONCE(*iter->sptep); in try_step_side()
122 static bool try_step_up(struct tdp_iter *iter) in try_step_up() argument
124 if (iter->level == iter->root_level) in try_step_up()
127 iter->level++; in try_step_up()
128 iter->gfn = round_gfn_for_level(iter->gfn, iter->level); in try_step_up()
129 tdp_iter_refresh_sptep(iter); in try_step_up()
150 void tdp_iter_next(struct tdp_iter *iter) in tdp_iter_next() argument
152 if (try_step_down(iter)) in tdp_iter_next()
156 if (try_step_side(iter)) in tdp_iter_next()
158 } while (try_step_up(iter)); in tdp_iter_next()
159 iter->valid = false; in tdp_iter_next()
162 u64 *tdp_iter_root_pt(struct tdp_iter *iter) in tdp_iter_root_pt() argument
164 return iter->pt_path[iter->root_level - 1]; in tdp_iter_root_pt()