diff options
| -rw-r--r-- | arch/x86/kvm/mmu.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 01ca00423938..7fbd0d273ea8 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
| @@ -4113,16 +4113,21 @@ static int mmu_shrink(struct shrinker *shrink, struct shrink_control *sc) | |||
| 4113 | LIST_HEAD(invalid_list); | 4113 | LIST_HEAD(invalid_list); |
| 4114 | 4114 | ||
| 4115 | /* | 4115 | /* |
| 4116 | * Never scan more than sc->nr_to_scan VM instances. | ||
| 4117 | * Will not hit this condition practically since we do not try | ||
| 4118 | * to shrink more than one VM and it is very unlikely to see | ||
| 4119 | * !n_used_mmu_pages so many times. | ||
| 4120 | */ | ||
| 4121 | if (!nr_to_scan--) | ||
| 4122 | break; | ||
| 4123 | /* | ||
| 4116 | * n_used_mmu_pages is accessed without holding kvm->mmu_lock | 4124 | * n_used_mmu_pages is accessed without holding kvm->mmu_lock |
| 4117 | * here. We may skip a VM instance errorneosly, but we do not | 4125 | * here. We may skip a VM instance errorneosly, but we do not |
| 4118 | * want to shrink a VM that only started to populate its MMU | 4126 | * want to shrink a VM that only started to populate its MMU |
| 4119 | * anyway. | 4127 | * anyway. |
| 4120 | */ | 4128 | */ |
| 4121 | if (kvm->arch.n_used_mmu_pages > 0) { | 4129 | if (!kvm->arch.n_used_mmu_pages) |
| 4122 | if (!nr_to_scan--) | ||
| 4123 | break; | ||
| 4124 | continue; | 4130 | continue; |
| 4125 | } | ||
| 4126 | 4131 | ||
| 4127 | idx = srcu_read_lock(&kvm->srcu); | 4132 | idx = srcu_read_lock(&kvm->srcu); |
| 4128 | spin_lock(&kvm->mmu_lock); | 4133 | spin_lock(&kvm->mmu_lock); |
