Lines Matching refs:iter

476 static bool mtrr_lookup_fixed_start(struct mtrr_iter *iter)
480 if (!fixed_mtrr_is_enabled(iter->mtrr_state))
483 seg = fixed_mtrr_addr_to_seg(iter->start);
487 iter->fixed = true;
488 index = fixed_mtrr_addr_seg_to_range_index(iter->start, seg);
489 iter->index = index;
490 iter->seg = seg;
494 static bool match_var_range(struct mtrr_iter *iter,
500 if (!(start >= iter->end || end <= iter->start)) {
501 iter->range = range;
508 iter->partial_map |= iter->start_max < start;
511 iter->start_max = max(iter->start_max, end);
518 static void __mtrr_lookup_var_next(struct mtrr_iter *iter)
520 struct kvm_mtrr *mtrr_state = iter->mtrr_state;
522 list_for_each_entry_continue(iter->range, &mtrr_state->head, node)
523 if (match_var_range(iter, iter->range))
526 iter->range = NULL;
527 iter->partial_map |= iter->start_max < iter->end;
530 static void mtrr_lookup_var_start(struct mtrr_iter *iter)
532 struct kvm_mtrr *mtrr_state = iter->mtrr_state;
534 iter->fixed = false;
535 iter->start_max = iter->start;
536 iter->range = NULL;
537 iter->range = list_prepare_entry(iter->range, &mtrr_state->head, node);
539 __mtrr_lookup_var_next(iter);
542 static void mtrr_lookup_fixed_next(struct mtrr_iter *iter)
545 if (fixed_mtrr_range_end_addr(iter->seg, iter->index) >= iter->end) {
546 iter->fixed = false;
547 iter->range = NULL;
551 iter->index++;
554 if (iter->index >= ARRAY_SIZE(iter->mtrr_state->fixed_ranges))
555 return mtrr_lookup_var_start(iter);
558 if (iter->index > fixed_mtrr_seg_end_range_index(iter->seg))
559 iter->seg++;
562 static void mtrr_lookup_var_next(struct mtrr_iter *iter)
564 __mtrr_lookup_var_next(iter);
567 static void mtrr_lookup_start(struct mtrr_iter *iter)
569 if (!mtrr_is_enabled(iter->mtrr_state)) {
570 iter->mtrr_disabled = true;
574 if (!mtrr_lookup_fixed_start(iter))
575 mtrr_lookup_var_start(iter);
578 static void mtrr_lookup_init(struct mtrr_iter *iter,
581 iter->mtrr_state = mtrr_state;
582 iter->start = start;
583 iter->end = end;
584 iter->mtrr_disabled = false;
585 iter->partial_map = false;
586 iter->fixed = false;
587 iter->range = NULL;
589 mtrr_lookup_start(iter);
592 static bool mtrr_lookup_okay(struct mtrr_iter *iter)
594 if (iter->fixed) {
595 iter->mem_type = iter->mtrr_state->fixed_ranges[iter->index];
599 if (iter->range) {
600 iter->mem_type = iter->range->base & 0xff;
607 static void mtrr_lookup_next(struct mtrr_iter *iter)
609 if (iter->fixed)
610 mtrr_lookup_fixed_next(iter);
612 mtrr_lookup_var_next(iter);
622 struct mtrr_iter iter;
631 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) {
632 int curr_type = iter.mem_type;
678 if (iter.mtrr_disabled)
689 WARN_ON(iter.partial_map);
699 struct mtrr_iter iter;
705 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) {
707 type = iter.mem_type;
711 if (type != iter.mem_type)
715 if (iter.mtrr_disabled)
718 if (!iter.partial_map)