We have a nice and handy helper to read from guest physical address space,
so we should make use of it in kvmppc_ld as we already do for its counterpart
in kvmppc_st.

Signed-off-by: Alexander Graf <ag...@suse.de>
---
 arch/powerpc/kvm/powerpc.c | 34 ++--------------------------------
 1 file changed, 2 insertions(+), 32 deletions(-)

diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index c5dbc66..2a8eaa9 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -284,26 +284,6 @@ int kvmppc_emulate_mmio(struct kvm_run *run, struct 
kvm_vcpu *vcpu)
 }
 EXPORT_SYMBOL_GPL(kvmppc_emulate_mmio);
 
-static hva_t kvmppc_pte_to_hva(struct kvm_vcpu *vcpu, struct kvmppc_pte *pte,
-                              bool read)
-{
-       hva_t hpage;
-
-       if (read && !pte->may_read)
-               goto err;
-
-       if (!read && !pte->may_write)
-               goto err;
-
-       hpage = gfn_to_hva(vcpu->kvm, pte->raddr >> PAGE_SHIFT);
-       if (kvm_is_error_hva(hpage))
-               goto err;
-
-       return hpage | (pte->raddr & ~PAGE_MASK);
-err:
-       return KVM_HVA_ERR_BAD;
-}
-
 int kvmppc_st(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
              bool data)
 {
@@ -330,7 +310,6 @@ int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int 
size, void *ptr,
                      bool data)
 {
        struct kvmppc_pte pte;
-       hva_t hva = *eaddr;
        int r;
 
        vcpu->stat.ld++;
@@ -342,19 +321,10 @@ int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int 
size, void *ptr,
 
        *eaddr = pte.raddr;
 
-       hva = kvmppc_pte_to_hva(vcpu, &pte, true);
-       if (kvm_is_error_hva(hva))
-               goto mmio;
-
-       if (copy_from_user(ptr, (void __user *)hva, size)) {
-               printk(KERN_INFO "kvmppc_ld at 0x%lx failed\n", hva);
-               goto mmio;
-       }
+       if (kvm_read_guest(vcpu->kvm, pte.raddr, ptr, size))
+               return EMULATE_DO_MMIO;
 
        return EMULATE_DONE;
-
-mmio:
-       return EMULATE_DO_MMIO;
 }
 EXPORT_SYMBOL_GPL(kvmppc_ld);
 
-- 
1.8.1.4

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to