Lines Matching refs:iter
482 static bool mtrr_lookup_fixed_start(struct mtrr_iter *iter) in mtrr_lookup_fixed_start() argument
486 if (!fixed_mtrr_is_enabled(iter->mtrr_state)) in mtrr_lookup_fixed_start()
489 seg = fixed_mtrr_addr_to_seg(iter->start); in mtrr_lookup_fixed_start()
493 iter->fixed = true; in mtrr_lookup_fixed_start()
494 index = fixed_mtrr_addr_seg_to_range_index(iter->start, seg); in mtrr_lookup_fixed_start()
495 iter->index = index; in mtrr_lookup_fixed_start()
496 iter->seg = seg; in mtrr_lookup_fixed_start()
500 static bool match_var_range(struct mtrr_iter *iter, in match_var_range() argument
506 if (!(start >= iter->end || end <= iter->start)) { in match_var_range()
507 iter->range = range; in match_var_range()
514 iter->partial_map |= iter->start_max < start; in match_var_range()
517 iter->start_max = max(iter->start_max, end); in match_var_range()
524 static void __mtrr_lookup_var_next(struct mtrr_iter *iter) in __mtrr_lookup_var_next() argument
526 struct kvm_mtrr *mtrr_state = iter->mtrr_state; in __mtrr_lookup_var_next()
528 list_for_each_entry_continue(iter->range, &mtrr_state->head, node) in __mtrr_lookup_var_next()
529 if (match_var_range(iter, iter->range)) in __mtrr_lookup_var_next()
532 iter->range = NULL; in __mtrr_lookup_var_next()
533 iter->partial_map |= iter->start_max < iter->end; in __mtrr_lookup_var_next()
536 static void mtrr_lookup_var_start(struct mtrr_iter *iter) in mtrr_lookup_var_start() argument
538 struct kvm_mtrr *mtrr_state = iter->mtrr_state; in mtrr_lookup_var_start()
540 iter->fixed = false; in mtrr_lookup_var_start()
541 iter->start_max = iter->start; in mtrr_lookup_var_start()
542 iter->range = list_prepare_entry(iter->range, &mtrr_state->head, node); in mtrr_lookup_var_start()
544 __mtrr_lookup_var_next(iter); in mtrr_lookup_var_start()
547 static void mtrr_lookup_fixed_next(struct mtrr_iter *iter) in mtrr_lookup_fixed_next() argument
550 if (fixed_mtrr_range_end_addr(iter->seg, iter->index) >= iter->end) { in mtrr_lookup_fixed_next()
551 iter->fixed = false; in mtrr_lookup_fixed_next()
552 iter->range = NULL; in mtrr_lookup_fixed_next()
556 iter->index++; in mtrr_lookup_fixed_next()
559 if (iter->index >= ARRAY_SIZE(iter->mtrr_state->fixed_ranges)) in mtrr_lookup_fixed_next()
560 return mtrr_lookup_var_start(iter); in mtrr_lookup_fixed_next()
563 if (iter->index > fixed_mtrr_seg_end_range_index(iter->seg)) in mtrr_lookup_fixed_next()
564 iter->seg++; in mtrr_lookup_fixed_next()
567 static void mtrr_lookup_var_next(struct mtrr_iter *iter) in mtrr_lookup_var_next() argument
569 __mtrr_lookup_var_next(iter); in mtrr_lookup_var_next()
572 static void mtrr_lookup_start(struct mtrr_iter *iter) in mtrr_lookup_start() argument
574 if (!mtrr_is_enabled(iter->mtrr_state)) { in mtrr_lookup_start()
575 iter->mtrr_disabled = true; in mtrr_lookup_start()
579 if (!mtrr_lookup_fixed_start(iter)) in mtrr_lookup_start()
580 mtrr_lookup_var_start(iter); in mtrr_lookup_start()
583 static void mtrr_lookup_init(struct mtrr_iter *iter, in mtrr_lookup_init() argument
586 iter->mtrr_state = mtrr_state; in mtrr_lookup_init()
587 iter->start = start; in mtrr_lookup_init()
588 iter->end = end; in mtrr_lookup_init()
589 iter->mtrr_disabled = false; in mtrr_lookup_init()
590 iter->partial_map = false; in mtrr_lookup_init()
591 iter->fixed = false; in mtrr_lookup_init()
592 iter->range = NULL; in mtrr_lookup_init()
594 mtrr_lookup_start(iter); in mtrr_lookup_init()
597 static bool mtrr_lookup_okay(struct mtrr_iter *iter) in mtrr_lookup_okay() argument
599 if (iter->fixed) { in mtrr_lookup_okay()
600 iter->mem_type = iter->mtrr_state->fixed_ranges[iter->index]; in mtrr_lookup_okay()
604 if (iter->range) { in mtrr_lookup_okay()
605 iter->mem_type = iter->range->base & 0xff; in mtrr_lookup_okay()
612 static void mtrr_lookup_next(struct mtrr_iter *iter) in mtrr_lookup_next() argument
614 if (iter->fixed) in mtrr_lookup_next()
615 mtrr_lookup_fixed_next(iter); in mtrr_lookup_next()
617 mtrr_lookup_var_next(iter); in mtrr_lookup_next()
627 struct mtrr_iter iter; in kvm_mtrr_get_guest_memory_type() local
636 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) { in kvm_mtrr_get_guest_memory_type()
637 int curr_type = iter.mem_type; in kvm_mtrr_get_guest_memory_type()
683 if (iter.mtrr_disabled) in kvm_mtrr_get_guest_memory_type()
694 WARN_ON(iter.partial_map); in kvm_mtrr_get_guest_memory_type()
704 struct mtrr_iter iter; in kvm_mtrr_check_gfn_range_consistency() local
710 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) { in kvm_mtrr_check_gfn_range_consistency()
712 type = iter.mem_type; in kvm_mtrr_check_gfn_range_consistency()
716 if (type != iter.mem_type) in kvm_mtrr_check_gfn_range_consistency()
720 if (iter.mtrr_disabled) in kvm_mtrr_check_gfn_range_consistency()
723 if (!iter.partial_map) in kvm_mtrr_check_gfn_range_consistency()