diff options
author | Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp> | 2013-02-27 05:44:34 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2013-03-04 18:21:08 -0500 |
commit | 7b6195a91d60909a2834ab7181e2b9476e6fe749 (patch) | |
tree | 2a3713b45d77bb886e031be65f3ef5f576eeb300 /arch/x86/kvm/x86.c | |
parent | 74d0727cb7aaaea48a6353209093be26abc8d160 (diff) |
KVM: set_memory_region: Refactor prepare_memory_region()
This patch drops the parameter old, a copy of the old memory slot, and
adds a new parameter named change to know the change being requested.
This not only cleans up the code but also removes extra copying of the
memory slot structure.
Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
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 | ||