Consolidate the various functions that read and write guest memory
PATCH 3/6 Consolidate the various functions that read and write guest memory
remove kvm_read_guest() and use emulator_read_std() instead.
Signature · 2 lines
------------- Laurent.Vivier-6ktuUTfB/[email protected] -------------- "Software is hard" - Donald Knuth
drivers/kvm/kvm.h +4 -4
@@ -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,
drivers/kvm/kvm_main.c +2 -34
@@ -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,
drivers/kvm/svm.c +1 -1
@@ -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 ;
drivers/kvm/vmx.c +8 -5
@@ -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 :
-------------------------------------------------------------------------
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