emulator_read_std() uses struct kvm_vcpu instead of x86_emulate_ctxt to be
called in place of kvm_read_guest().

Signed-off-by: Laurent Vivier <[EMAIL PROTECTED]>
-- 
------------- [EMAIL PROTECTED]  --------------
          "Software is hard" - Donald Knuth
Index: kvm/drivers/kvm/kvm_main.c
===================================================================
--- kvm.orig/drivers/kvm/kvm_main.c     2007-07-30 10:11:01.000000000 +0200
+++ kvm/drivers/kvm/kvm_main.c  2007-07-30 10:11:06.000000000 +0200
@@ -975,9 +975,8 @@
 static int emulator_read_std(unsigned long addr,
                             void *val,
                             unsigned int bytes,
-                            struct x86_emulate_ctxt *ctxt)
+                            struct kvm_vcpu *vcpu)
 {
-       struct kvm_vcpu *vcpu = ctxt->vcpu;
        void *data = val;
 
        while (bytes) {
@@ -1048,7 +1047,7 @@
                memcpy(val, vcpu->mmio_data, bytes);
                vcpu->mmio_read_completed = 0;
                return X86EMUL_CONTINUE;
-       } else if (emulator_read_std(addr, val, bytes, ctxt)
+       } else if (emulator_read_std(addr, val, bytes, vcpu)
                   == X86EMUL_CONTINUE)
                return X86EMUL_CONTINUE;
 
@@ -1221,7 +1220,7 @@
        if (reported)
                return;
 
-       emulator_read_std(rip_linear, (void *)opcodes, 4, ctxt);
+       emulator_read_std(rip_linear, (void *)opcodes, 4, ctxt->vcpu);
 
        printk(KERN_ERR "emulation failed but !mmio_needed?"
               " rip %lx %02x %02x %02x %02x\n",
Index: kvm/drivers/kvm/x86_emulate.c
===================================================================
--- kvm.orig/drivers/kvm/x86_emulate.c  2007-07-30 10:11:01.000000000 +0200
+++ kvm/drivers/kvm/x86_emulate.c       2007-07-30 10:11:06.000000000 +0200
@@ -420,7 +420,7 @@
 #define insn_fetch(_type, _size, _eip)                                  \
 ({     unsigned long _x;                                               \
        rc = ops->read_std((unsigned long)(_eip) + ctxt->cs_base, &_x,  \
-                                                  (_size), ctxt);       \
+                                                  (_size), ctxt->vcpu); \
        if ( rc != 0 )                                                  \
                goto done;                                              \
        (_eip) += (_size);                                              \
@@ -469,10 +469,12 @@
        if (op_bytes == 2)
                op_bytes = 3;
        *address = 0;
-       rc = ops->read_std((unsigned long)ptr, (unsigned long *)size, 2, ctxt);
+       rc = ops->read_std((unsigned long)ptr, (unsigned long *)size, 2,
+                          ctxt->vcpu);
        if (rc)
                return rc;
-       rc = ops->read_std((unsigned long)ptr + 2, address, op_bytes, ctxt);
+       rc = ops->read_std((unsigned long)ptr + 2, address, op_bytes,
+                          ctxt->vcpu);
        return rc;
 }
 
@@ -963,7 +965,7 @@
                        dst.bytes = 8;
                if ((rc = ops->read_std(register_address(ctxt->ss_base,
                                                         _regs[VCPU_REGS_RSP]),
-                                       &dst.val, dst.bytes, ctxt)) != 0)
+                                       &dst.val, dst.bytes, ctxt->vcpu)) != 0)
                        goto done;
                register_address_increment(_regs[VCPU_REGS_RSP], dst.bytes);
                break;
@@ -1048,7 +1050,7 @@
                                dst.bytes = 8;
                                if ((rc = ops->read_std((unsigned long)dst.ptr,
                                                        &dst.val, 8,
-                                                       ctxt)) != 0)
+                                                       ctxt->vcpu)) != 0)
                                        goto done;
                        }
                        register_address_increment(_regs[VCPU_REGS_RSP],
@@ -1171,7 +1173,8 @@
 
 pop_instruction:
                if ((rc = ops->read_std(register_address(ctxt->ss_base,
-                       _regs[VCPU_REGS_RSP]), dst.ptr, op_bytes, ctxt)) != 0)
+                       _regs[VCPU_REGS_RSP]), dst.ptr, op_bytes, ctxt->vcpu))
+                       != 0)
                        goto done;
 
                register_address_increment(_regs[VCPU_REGS_RSP], op_bytes);
Index: kvm/drivers/kvm/x86_emulate.h
===================================================================
--- kvm.orig/drivers/kvm/x86_emulate.h  2007-07-30 10:11:01.000000000 +0200
+++ kvm/drivers/kvm/x86_emulate.h       2007-07-30 10:11:06.000000000 +0200
@@ -60,7 +60,7 @@
         *  @bytes: [IN ] Number of bytes to read from memory.
         */
        int (*read_std)(unsigned long addr, void *val,
-                       unsigned int bytes, struct x86_emulate_ctxt * ctxt);
+                       unsigned int bytes, struct kvm_vcpu *vcpu);
 
        /*
         * write_std: Write bytes of standard (non-emulated/special) memory.

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