aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 26216bb4403f..7198234fa088 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -6906,23 +6906,21 @@ out_free:
6906 6906
6907int kvm_arch_prepare_memory_region(struct kvm *kvm, 6907int kvm_arch_prepare_memory_region(struct kvm *kvm,
6908 struct kvm_memory_slot *memslot, 6908 struct kvm_memory_slot *memslot,
6909 struct kvm_memory_slot old, 6909 struct kvm_userspace_memory_region *mem,
6910 struct kvm_userspace_memory_region *mem) 6910 enum kvm_mr_change change)
6911{ 6911{
6912 int npages = memslot->npages;
6913
6914 /* 6912 /*
6915 * Only private memory slots need to be mapped here since 6913 * Only private memory slots need to be mapped here since
6916 * KVM_SET_MEMORY_REGION ioctl is no longer supported. 6914 * KVM_SET_MEMORY_REGION ioctl is no longer supported.
6917 */ 6915 */
6918 if ((memslot->id >= KVM_USER_MEM_SLOTS) && npages && !old.npages) { 6916 if ((memslot->id >= KVM_USER_MEM_SLOTS) && (change == KVM_MR_CREATE)) {
6919 unsigned long userspace_addr; 6917 unsigned long userspace_addr;
6920 6918
6921 /* 6919 /*
6922 * MAP_SHARED to prevent internal slot pages from being moved 6920 * MAP_SHARED to prevent internal slot pages from being moved
6923 * by fork()/COW. 6921 * by fork()/COW.
6924 */ 6922 */
6925 userspace_addr = vm_mmap(NULL, 0, npages * PAGE_SIZE, 6923 userspace_addr = vm_mmap(NULL, 0, memslot->npages * PAGE_SIZE,
6926 PROT_READ | PROT_WRITE, 6924 PROT_READ | PROT_WRITE,
6927 MAP_SHARED | MAP_ANONYMOUS, 0); 6925 MAP_SHARED | MAP_ANONYMOUS, 0);
6928 6926