@@ -2935,8 +2935,10 @@ static int shrink_kvm_mmu(struct kvm *kv
idx = srcu_read_lock(&kvm->srcu);
spin_lock(&kvm->mmu_lock);
- if (kvm->arch.n_used_mmu_pages > 0)
- freed_pages = kvm_mmu_remove_some_alloc_mmu_pages(kvm);
+ while (nr_to_scan > 0 && kvm->arch.n_used_mmu_pages > 0) {
+ freed_pages += kvm_mmu_remove_some_alloc_mmu_pages(kvm);
+ nr_to_scan--;
+ }
spin_unlock(&kvm->mmu_lock);
srcu_read_unlock(&kvm->srcu, idx);
@@ -2952,7 +2954,6 @@ static int shrink_kvm_mmu(struct kvm *kv
static int mmu_shrink(int nr_to_scan, gfp_t gfp_mask)
{
int err;
- int freed;
struct kvm *kvm;
if (nr_to_scan == 0)
@@ -2989,11 +2990,11 @@ retry:
* operation itself.
*/
spin_unlock(&kvm_lock);
- freed = shrink_kvm_mmu(kvm, nr_to_scan);
+ nr_to_scan -= shrink_kvm_mmu(kvm, nr_to_scan);
kvm_put_kvm(kvm);
- if (!freed && nr_to_scan > 0)
+ if (nr_to_scan > 0)
goto retry;
out: