Lines Matching refs:iter

471 static bool mtrr_lookup_fixed_start(struct mtrr_iter *iter)
475 if (!fixed_mtrr_is_enabled(iter->mtrr_state))
478 seg = fixed_mtrr_addr_to_seg(iter->start);
482 iter->fixed = true;
483 index = fixed_mtrr_addr_seg_to_range_index(iter->start, seg);
484 iter->index = index;
485 iter->seg = seg;
489 static bool match_var_range(struct mtrr_iter *iter,
495 if (!(start >= iter->end || end <= iter->start)) {
496 iter->range = range;
503 iter->partial_map |= iter->start_max < start;
506 iter->start_max = max(iter->start_max, end);
513 static void __mtrr_lookup_var_next(struct mtrr_iter *iter)
515 struct kvm_mtrr *mtrr_state = iter->mtrr_state;
517 list_for_each_entry_continue(iter->range, &mtrr_state->head, node)
518 if (match_var_range(iter, iter->range))
521 iter->range = NULL;
522 iter->partial_map |= iter->start_max < iter->end;
525 static void mtrr_lookup_var_start(struct mtrr_iter *iter)
527 struct kvm_mtrr *mtrr_state = iter->mtrr_state;
529 iter->fixed = false;
530 iter->start_max = iter->start;
531 iter->range = NULL;
532 iter->range = list_prepare_entry(iter->range, &mtrr_state->head, node);
534 __mtrr_lookup_var_next(iter);
537 static void mtrr_lookup_fixed_next(struct mtrr_iter *iter)
540 if (fixed_mtrr_range_end_addr(iter->seg, iter->index) >= iter->end) {
541 iter->fixed = false;
542 iter->range = NULL;
546 iter->index++;
549 if (iter->index >= ARRAY_SIZE(iter->mtrr_state->fixed_ranges))
550 return mtrr_lookup_var_start(iter);
553 if (iter->index > fixed_mtrr_seg_end_range_index(iter->seg))
554 iter->seg++;
557 static void mtrr_lookup_var_next(struct mtrr_iter *iter)
559 __mtrr_lookup_var_next(iter);
562 static void mtrr_lookup_start(struct mtrr_iter *iter)
564 if (!mtrr_is_enabled(iter->mtrr_state)) {
565 iter->mtrr_disabled = true;
569 if (!mtrr_lookup_fixed_start(iter))
570 mtrr_lookup_var_start(iter);
573 static void mtrr_lookup_init(struct mtrr_iter *iter,
576 iter->mtrr_state = mtrr_state;
577 iter->start = start;
578 iter->end = end;
579 iter->mtrr_disabled = false;
580 iter->partial_map = false;
581 iter->fixed = false;
582 iter->range = NULL;
584 mtrr_lookup_start(iter);
587 static bool mtrr_lookup_okay(struct mtrr_iter *iter)
589 if (iter->fixed) {
590 iter->mem_type = iter->mtrr_state->fixed_ranges[iter->index];
594 if (iter->range) {
595 iter->mem_type = iter->range->base & 0xff;
602 static void mtrr_lookup_next(struct mtrr_iter *iter)
604 if (iter->fixed)
605 mtrr_lookup_fixed_next(iter);
607 mtrr_lookup_var_next(iter);
617 struct mtrr_iter iter;
626 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) {
627 int curr_type = iter.mem_type;
673 if (iter.mtrr_disabled)
684 WARN_ON(iter.partial_map);
694 struct mtrr_iter iter;
700 mtrr_for_each_mem_type(&iter, mtrr_state, start, end) {
702 type = iter.mem_type;
706 if (type != iter.mem_type)
710 if (iter.mtrr_disabled)
713 if (!iter.partial_map)