diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 10 |
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 | ||
6907 | int kvm_arch_prepare_memory_region(struct kvm *kvm, | 6907 | int 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 | ||