KVM: set_memory_region: Refactor prepare_memory_region()
authorTakuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Wed, 27 Feb 2013 10:44:34 +0000 (19:44 +0900)
committerMarcelo Tosatti <mtosatti@redhat.com>
Mon, 4 Mar 2013 23:21:08 +0000 (20:21 -0300)
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>
arch/arm/kvm/arm.c
arch/ia64/kvm/kvm-ia64.c
arch/powerpc/kvm/powerpc.c
arch/s390/kvm/kvm-s390.c
arch/x86/kvm/x86.c
include/linux/kvm_host.h
virt/kvm/kvm_main.c

index 24cb5f6..96ebab7 100644 (file)
@@ -230,8 +230,8 @@ int kvm_arch_set_memory_region(struct kvm *kvm,
 
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                   struct kvm_memory_slot *memslot,
-                                  struct kvm_memory_slot old,
-                                  struct kvm_userspace_memory_region *mem)
+                                  struct kvm_userspace_memory_region *mem,
+                                  enum kvm_mr_change change)
 {
        return 0;
 }
index 43701f0..5c2b07e 100644 (file)
@@ -1560,8 +1560,8 @@ int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages)
 
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                struct kvm_memory_slot *memslot,
-               struct kvm_memory_slot old,
-               struct kvm_userspace_memory_region *mem)
+               struct kvm_userspace_memory_region *mem,
+               enum kvm_mr_change change)
 {
        unsigned long i;
        unsigned long pfn;
index 22b3315..8aa51cd 100644 (file)
@@ -412,8 +412,8 @@ int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages)
 
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                   struct kvm_memory_slot *memslot,
-                                  struct kvm_memory_slot old,
-                                  struct kvm_userspace_memory_region *mem)
+                                  struct kvm_userspace_memory_region *mem,
+                                  enum kvm_mr_change change)
 {
        return kvmppc_core_prepare_memory_region(kvm, memslot, mem);
 }
index 07ac302..4288780 100644 (file)
@@ -974,8 +974,8 @@ int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages)
 /* Section: memory related */
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                   struct kvm_memory_slot *memslot,
-                                  struct kvm_memory_slot old,
-                                  struct kvm_userspace_memory_region *mem)
+                                  struct kvm_userspace_memory_region *mem,
+                                  enum kvm_mr_change change)
 {
        /* A few sanity checks. We can have exactly one memory slot which has
           to start at guest virtual zero and which has to be located at a
index 26216bb..7198234 100644 (file)
@@ -6906,23 +6906,21 @@ out_free:
 
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                struct kvm_memory_slot *memslot,
-                               struct kvm_memory_slot old,
-                               struct kvm_userspace_memory_region *mem)
+                               struct kvm_userspace_memory_region *mem,
+                               enum kvm_mr_change change)
 {
-       int npages = memslot->npages;
-
        /*
         * Only private memory slots need to be mapped here since
         * KVM_SET_MEMORY_REGION ioctl is no longer supported.
         */
-       if ((memslot->id >= KVM_USER_MEM_SLOTS) && npages && !old.npages) {
+       if ((memslot->id >= KVM_USER_MEM_SLOTS) && (change == KVM_MR_CREATE)) {
                unsigned long userspace_addr;
 
                /*
                 * MAP_SHARED to prevent internal slot pages from being moved
                 * by fork()/COW.
                 */
-               userspace_addr = vm_mmap(NULL, 0, npages * PAGE_SIZE,
+               userspace_addr = vm_mmap(NULL, 0, memslot->npages * PAGE_SIZE,
                                         PROT_READ | PROT_WRITE,
                                         MAP_SHARED | MAP_ANONYMOUS, 0);
 
index 8eaf61f..caa72cf 100644 (file)
@@ -479,8 +479,8 @@ void kvm_arch_free_memslot(struct kvm_memory_slot *free,
 int kvm_arch_create_memslot(struct kvm_memory_slot *slot, unsigned long npages);
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                struct kvm_memory_slot *memslot,
-                               struct kvm_memory_slot old,
-                               struct kvm_userspace_memory_region *mem);
+                               struct kvm_userspace_memory_region *mem,
+                               enum kvm_mr_change change);
 void kvm_arch_commit_memory_region(struct kvm *kvm,
                                struct kvm_userspace_memory_region *mem,
                                struct kvm_memory_slot old);
index c7979ed..8f85bae 100644 (file)
@@ -856,7 +856,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
                slots = old_memslots;
        }
 
-       r = kvm_arch_prepare_memory_region(kvm, &new, old, mem);
+       r = kvm_arch_prepare_memory_region(kvm, &new, mem, change);
        if (r)
                goto out_slots;