emulator_write_emulated() uses struct kvm_vcpu instead of x86_emulate_ctxt to be
called in place of kvm_write_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:49:39.000000000 +0200
+++ kvm/drivers/kvm/kvm_main.c  2007-07-30 10:50:20.000000000 +0200
@@ -978,7 +978,7 @@
 static int emulator_write_std(unsigned long addr,
                              const void *val,
                              unsigned int bytes,
-                             struct x86_emulate_ctxt *ctxt)
+                             struct kvm_vcpu *vcpu)
 {
        printk(KERN_ERR "emulator_write_std: addr %lx n %d\n",
               addr, bytes);
@@ -1061,9 +1061,8 @@
 static int emulator_write_emulated_onepage(unsigned long addr,
                                           const void *val,
                                           unsigned int bytes,
-                                          struct x86_emulate_ctxt *ctxt)
+                                          struct kvm_vcpu *vcpu)
 {
-       struct kvm_vcpu      *vcpu = ctxt->vcpu;
        struct kvm_io_device *mmio_dev;
        gpa_t                 gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
 
@@ -1096,21 +1095,21 @@
 static int emulator_write_emulated(unsigned long addr,
                                   const void *val,
                                   unsigned int bytes,
-                                  struct x86_emulate_ctxt *ctxt)
+                                  struct kvm_vcpu *vcpu)
 {
        /* Crossing a page boundary? */
        if (((addr + bytes - 1) ^ addr) & PAGE_MASK) {
                int rc, now;
 
                now = -addr & ~PAGE_MASK;
-               rc = emulator_write_emulated_onepage(addr, val, now, ctxt);
+               rc = emulator_write_emulated_onepage(addr, val, now, vcpu);
                if (rc != X86EMUL_CONTINUE)
                        return rc;
                addr += now;
                val += now;
                bytes -= now;
        }
-       return emulator_write_emulated_onepage(addr, val, bytes, ctxt);
+       return emulator_write_emulated_onepage(addr, val, bytes, vcpu);
 }
 
 static int emulator_cmpxchg_emulated(unsigned long addr,
@@ -1125,7 +1124,7 @@
                reported = 1;
                printk(KERN_WARNING "kvm: emulating exchange as write\n");
        }
-       return emulator_write_emulated(addr, new, bytes, ctxt);
+       return emulator_write_emulated(addr, new, bytes, ctxt->vcpu);
 }
 
 static unsigned long get_segment_base(struct kvm_vcpu *vcpu, int seg)
Index: kvm/drivers/kvm/x86_emulate.c
===================================================================
--- kvm.orig/drivers/kvm/x86_emulate.c  2007-07-30 10:49:38.000000000 +0200
+++ kvm/drivers/kvm/x86_emulate.c       2007-07-30 10:50:20.000000000 +0200
@@ -1058,7 +1058,7 @@
                        if ((rc = ops->write_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;
                        no_wb = 1;
                        break;
@@ -1097,7 +1097,7 @@
                        else
                                rc = ops->write_emulated((unsigned long)dst.ptr,
                                                         &dst.val, dst.bytes,
-                                                        ctxt);
+                                                        ctxt->vcpu);
                        if (rc != 0)
                                goto done;
                default:
Index: kvm/drivers/kvm/x86_emulate.h
===================================================================
--- kvm.orig/drivers/kvm/x86_emulate.h  2007-07-30 10:49:38.000000000 +0200
+++ kvm/drivers/kvm/x86_emulate.h       2007-07-30 10:50:20.000000000 +0200
@@ -71,7 +71,7 @@
         *  @bytes: [IN ] Number of bytes to write to memory.
         */
        int (*write_std)(unsigned long addr, const void *val,
-                        unsigned int bytes, struct x86_emulate_ctxt * ctxt);
+                        unsigned int bytes, struct kvm_vcpu *vcpu);
 
        /*
         * read_emulated: Read bytes from emulated/special memory area.
@@ -94,7 +94,7 @@
        int (*write_emulated) (unsigned long addr,
                               const void *val,
                               unsigned int bytes,
-                              struct x86_emulate_ctxt * ctxt);
+                              struct kvm_vcpu *vcpu);
 
        /*
         * cmpxchg_emulated: Emulate an atomic (LOCKed) CMPXCHG operation on an

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