Consolidate the various functions that read and write guest memory
PATCH 1/6 Consolidate the various functions that read and write guest memory
emulator_read_std() uses struct kvm_vcpu instead of x86_emulate_ctxt to be called in place of kvm_read_guest().
Signature · 2 lines
------------- Laurent.Vivier-6ktuUTfB/[email protected] -------------- "Software is hard" - Donald Knuth
drivers/kvm/kvm_main.c +3 -4
@@ -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",
drivers/kvm/x86_emulate.c +9 -6
@@ -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);
drivers/kvm/x86_emulate.h +1 -1
@@ -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.
-------------------------------------------------------------------------
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