diff options
Diffstat (limited to 'drivers/kvm/kvm_main.c')
-rw-r--r-- | drivers/kvm/kvm_main.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c index 729573b844e5..93ecafbfb1b6 100644 --- a/drivers/kvm/kvm_main.c +++ b/drivers/kvm/kvm_main.c | |||
@@ -333,26 +333,13 @@ int __kvm_set_memory_region(struct kvm *kvm, | |||
333 | if (mem->slot >= kvm->nmemslots) | 333 | if (mem->slot >= kvm->nmemslots) |
334 | kvm->nmemslots = mem->slot + 1; | 334 | kvm->nmemslots = mem->slot + 1; |
335 | 335 | ||
336 | *memslot = new; | ||
337 | |||
336 | if (!kvm->n_requested_mmu_pages) { | 338 | if (!kvm->n_requested_mmu_pages) { |
337 | unsigned int n_pages; | 339 | unsigned int nr_mmu_pages = kvm_mmu_calculate_mmu_pages(kvm); |
338 | 340 | kvm_mmu_change_mmu_pages(kvm, nr_mmu_pages); | |
339 | if (npages) { | ||
340 | n_pages = npages * KVM_PERMILLE_MMU_PAGES / 1000; | ||
341 | kvm_mmu_change_mmu_pages(kvm, kvm->n_alloc_mmu_pages + | ||
342 | n_pages); | ||
343 | } else { | ||
344 | unsigned int nr_mmu_pages; | ||
345 | |||
346 | n_pages = old.npages * KVM_PERMILLE_MMU_PAGES / 1000; | ||
347 | nr_mmu_pages = kvm->n_alloc_mmu_pages - n_pages; | ||
348 | nr_mmu_pages = max(nr_mmu_pages, | ||
349 | (unsigned int) KVM_MIN_ALLOC_MMU_PAGES); | ||
350 | kvm_mmu_change_mmu_pages(kvm, nr_mmu_pages); | ||
351 | } | ||
352 | } | 341 | } |
353 | 342 | ||
354 | *memslot = new; | ||
355 | |||
356 | kvm_mmu_slot_remove_write_access(kvm, mem->slot); | 343 | kvm_mmu_slot_remove_write_access(kvm, mem->slot); |
357 | kvm_flush_remote_tlbs(kvm); | 344 | kvm_flush_remote_tlbs(kvm); |
358 | 345 | ||