diff options
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r-- | virt/kvm/kvm_main.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 5b4533079eaa..407277b33dc8 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -679,21 +679,19 @@ static void update_memslots(struct kvm_memslots *slots, | |||
679 | struct kvm_memory_slot *mslots = slots->memslots; | 679 | struct kvm_memory_slot *mslots = slots->memslots; |
680 | 680 | ||
681 | WARN_ON(mslots[i].id != id); | 681 | WARN_ON(mslots[i].id != id); |
682 | if (new->npages != mslots[i].npages) { | 682 | if (new->npages < mslots[i].npages) { |
683 | if (new->npages < mslots[i].npages) { | 683 | while (i < KVM_MEM_SLOTS_NUM - 1 && |
684 | while (i < KVM_MEM_SLOTS_NUM - 1 && | 684 | new->npages < mslots[i + 1].npages) { |
685 | new->npages < mslots[i + 1].npages) { | 685 | mslots[i] = mslots[i + 1]; |
686 | mslots[i] = mslots[i + 1]; | 686 | slots->id_to_index[mslots[i].id] = i; |
687 | slots->id_to_index[mslots[i].id] = i; | 687 | i++; |
688 | i++; | 688 | } |
689 | } | 689 | } else { |
690 | } else { | 690 | while (i > 0 && |
691 | while (i > 0 && | 691 | new->npages > mslots[i - 1].npages) { |
692 | new->npages > mslots[i - 1].npages) { | 692 | mslots[i] = mslots[i - 1]; |
693 | mslots[i] = mslots[i - 1]; | 693 | slots->id_to_index[mslots[i].id] = i; |
694 | slots->id_to_index[mslots[i].id] = i; | 694 | i--; |
695 | i--; | ||
696 | } | ||
697 | } | 695 | } |
698 | } | 696 | } |
699 | 697 | ||