remove kvm_read_guest() and use emulator_read_std() instead.

Signed-off-by: Laurent Vivier <[EMAIL PROTECTED]>
-- 
------------- [EMAIL PROTECTED]  --------------
          "Software is hard" - Donald Knuth
Index: kvm/drivers/kvm/kvm.h
===================================================================
--- kvm.orig/drivers/kvm/kvm.h  2007-07-30 10:11:56.000000000 +0200
+++ kvm/drivers/kvm/kvm.h       2007-07-30 10:12:45.000000000 +0200
@@ -586,10 +586,10 @@
 void kvm_put_guest_fpu(struct kvm_vcpu *vcpu);
 void kvm_flush_remote_tlbs(struct kvm *kvm);
 
-int kvm_read_guest(struct kvm_vcpu *vcpu,
-              gva_t addr,
-              unsigned long size,
-              void *dest);
+int emulator_read_std(unsigned long addr,
+                      void *val,
+                     unsigned int bytes,
+                     struct kvm_vcpu *vcpu);
 
 int kvm_write_guest(struct kvm_vcpu *vcpu,
                gva_t addr,
Index: kvm/drivers/kvm/kvm_main.c
===================================================================
--- kvm.orig/drivers/kvm/kvm_main.c     2007-07-30 10:11:56.000000000 +0200
+++ kvm/drivers/kvm/kvm_main.c  2007-07-30 10:12:45.000000000 +0200
@@ -144,39 +144,6 @@
        return likely(n >= 0 && n < KVM_MAX_VCPUS);
 }
 
-int kvm_read_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
-                  void *dest)
-{
-       unsigned char *host_buf = dest;
-       unsigned long req_size = size;
-
-       while (size) {
-               hpa_t paddr;
-               unsigned now;
-               unsigned offset;
-               hva_t guest_buf;
-
-               paddr = gva_to_hpa(vcpu, addr);
-
-               if (is_error_hpa(paddr))
-                       break;
-
-               guest_buf = (hva_t)kmap_atomic(
-                                       pfn_to_page(paddr >> PAGE_SHIFT),
-                                       KM_USER0);
-               offset = addr & ~PAGE_MASK;
-               guest_buf |= offset;
-               now = min(size, PAGE_SIZE - offset);
-               memcpy(host_buf, (void*)guest_buf, now);
-               host_buf += now;
-               addr += now;
-               size -= now;
-               kunmap_atomic((void *)(guest_buf & PAGE_MASK), KM_USER0);
-       }
-       return req_size - size;
-}
-EXPORT_SYMBOL_GPL(kvm_read_guest);
-
 int kvm_write_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
                    void *data)
 {
@@ -972,7 +939,7 @@
        }
 }
 
-static int emulator_read_std(unsigned long addr,
+int emulator_read_std(unsigned long addr,
                             void *val,
                             unsigned int bytes,
                             struct kvm_vcpu *vcpu)
@@ -1006,6 +973,7 @@
 
        return X86EMUL_CONTINUE;
 }
+EXPORT_SYMBOL_GPL(emulator_read_std);
 
 static int emulator_write_std(unsigned long addr,
                              const void *val,
Index: kvm/drivers/kvm/svm.c
===================================================================
--- kvm.orig/drivers/kvm/svm.c  2007-07-30 10:11:56.000000000 +0200
+++ kvm/drivers/kvm/svm.c       2007-07-30 10:12:45.000000000 +0200
@@ -986,7 +986,7 @@
                       vcpu->svm->vmcb->control.exit_info_2,
                       ins_length);
 
-       if (kvm_read_guest(vcpu, rip, ins_length, inst) != ins_length)
+       if (emulator_read_std(rip, inst, ins_length, vcpu) != X86EMUL_CONTINUE)
                /* #PF */
                return 0;
 
Index: kvm/drivers/kvm/vmx.c
===================================================================
--- kvm.orig/drivers/kvm/vmx.c  2007-07-30 10:11:56.000000000 +0200
+++ kvm/drivers/kvm/vmx.c       2007-07-30 10:12:45.000000000 +0200
@@ -16,6 +16,7 @@
  */
 
 #include "kvm.h"
+#include "x86_emulate.h"
 #include "vmx.h"
 #include "segment_descriptor.h"
 
@@ -1451,8 +1452,8 @@
                return;
        }
 
-       if (kvm_read_guest(vcpu, irq * sizeof(ent), sizeof(ent), &ent) !=
-                                                               sizeof(ent)) {
+       if (emulator_read_std(irq * sizeof(ent), &ent, sizeof(ent), vcpu) !=
+                                                       X86EMUL_CONTINUE) {
                vcpu_printf(vcpu, "%s: read guest err\n", __FUNCTION__);
                return;
        }
@@ -1665,7 +1666,7 @@
        u64 inst;
        gva_t rip;
        int countr_size;
-       int i, n;
+       int i;
 
        if ((vmcs_readl(GUEST_RFLAGS) & X86_EFLAGS_VM)) {
                countr_size = 2;
@@ -1680,9 +1681,11 @@
        if (countr_size != 8)
                rip += vmcs_readl(GUEST_CS_BASE);
 
-       n = kvm_read_guest(vcpu, rip, sizeof(inst), &inst);
+       if (emulator_read_std(rip, &inst, sizeof(inst), vcpu) !=
+                                                       X86EMUL_CONTINUE)
+               return 0;
 
-       for (i = 0; i < n; i++) {
+       for (i = 0; i < sizeof(inst); i++) {
                switch (((u8*)&inst)[i]) {
                case 0xf0:
                case 0xf2:

Attachment: signature.asc
Description: OpenPGP digital signature

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to