KVM: Introduce hva_to_gfn_memslot() for kvm_handle_hva()
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Mon, 2 Jul 2012 08:54:30 +0000 (17:54 +0900)
committerMarcelo Tosatti <mtosatti@redhat.com>
Wed, 18 Jul 2012 19:55:04 +0000 (16:55 -0300)
This restricts hva handling in mmu code and makes it easier to extend
kvm_handle_hva() so that it can treat a range of addresses later in this
patch series.

Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Cc: Alexander Graf <agraf@suse.de>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/powerpc/kvm/book3s_64_mmu_hv.c
arch/x86/kvm/mmu.c
include/linux/kvm_host.h

index d03eb6f7b0584e368bdd96e0f1969af58e885371..37037553fe6082cbfcd106bf72ba6e0966975341 100644 (file)
@@ -772,10 +772,10 @@ static int kvm_handle_hva(struct kvm *kvm, unsigned long hva,
 
                end = start + (memslot->npages << PAGE_SHIFT);
                if (hva >= start && hva < end) {
-                       gfn_t gfn_offset = (hva - start) >> PAGE_SHIFT;
+                       gfn_t gfn = hva_to_gfn_memslot(hva, memslot);
+                       gfn_t gfn_offset = gfn - memslot->base_gfn;
 
-                       ret = handler(kvm, &memslot->rmap[gfn_offset],
-                                     memslot->base_gfn + gfn_offset);
+                       ret = handler(kvm, &memslot->rmap[gfn_offset], gfn);
                        retval |= ret;
                }
        }
index 2beb95b57cbe8803dbf111939c297d979bf96e58..170a632d9d3484c52851a11f3c8b87c44e31f9aa 100644 (file)
@@ -1278,8 +1278,7 @@ static int kvm_handle_hva(struct kvm *kvm, unsigned long hva,
 
                end = start + (memslot->npages << PAGE_SHIFT);
                if (hva >= start && hva < end) {
-                       gfn_t gfn_offset = (hva - start) >> PAGE_SHIFT;
-                       gfn_t gfn = memslot->base_gfn + gfn_offset;
+                       gfn_t gfn = hva_to_gfn_memslot(hva, memslot);
 
                        ret = 0;
 
index e3c86f8c86c9f20a3e0ff791da0db8e8643bfd2b..6f6c18a03c504344125842e2093e588a2a620a3d 100644 (file)
@@ -740,6 +740,14 @@ static inline gfn_t gfn_to_index(gfn_t gfn, gfn_t base_gfn, int level)
                (base_gfn >> KVM_HPAGE_GFN_SHIFT(level));
 }
 
+static inline gfn_t
+hva_to_gfn_memslot(unsigned long hva, struct kvm_memory_slot *slot)
+{
+       gfn_t gfn_offset = (hva - slot->userspace_addr) >> PAGE_SHIFT;
+
+       return slot->base_gfn + gfn_offset;
+}
+
 static inline unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot,
                                               gfn_t gfn)
 {
This page took 0.03361 seconds and 5 git commands to generate.