Consolidate the various functions that read and write guest memory
PATCH 5/6 Consolidate the various functions that read and write guest memory
remove kvm_write_guest() and use emulator_write_emulated() instead.
Signature · 2 lines
------------- Laurent.Vivier-6ktuUTfB/[email protected] -------------- "Software is hard" - Donald Knuth
drivers/kvm/kvm.h +4 -5
@@ -590,11 +590,10 @@void *val, unsigned int bytes, struct kvm_vcpu *vcpu); - -int kvm_write_guest (struct kvm_vcpu *vcpu, -gva_t addr, -unsigned long size, -void *data); +int emulator_write_emulated (unsigned long addr, +const void *val, +unsigned int bytes, +struct kvm_vcpu *vcpu);unsigned long segment_base (u16 selector);
drivers/kvm/kvm_main.c +2 -36
@@ -144,41 +144,6 @@return likely (n >=0 && n <KVM_MAX_VCPUS ); } -int kvm_write_guest (struct kvm_vcpu *vcpu,gva_t addr,unsigned long size, -void *data) -{ -unsigned char *host_buf = data; -unsigned long req_size = size; - -while (size) { -hpa_t paddr; -unsigned now; -unsigned offset; -hva_t guest_buf; -gfn_t gfn; - - paddr =gva_to_hpa (vcpu, addr); - -if (is_error_hpa (paddr)) -break ; - - gfn = vcpu->mmu.gva_to_gpa (vcpu, addr) >>PAGE_SHIFT ; -mark_page_dirty (vcpu->kvm, gfn); - 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 ((void *)guest_buf, host_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_write_guest); -void kvm_load_guest_fpu (struct kvm_vcpu *vcpu) {if (!vcpu->fpu_active || vcpu->guest_fpu_loaded)
@@ -1092,7 +1057,7 @@return X86EMUL_CONTINUE ; } -static int emulator_write_emulated (unsigned long addr, +int emulator_write_emulated (unsigned long addr,const void *val,unsigned int bytes,struct kvm_vcpu *vcpu)
@@ -1111,6 +1076,7 @@ }return emulator_write_emulated_onepage (addr, val, bytes, vcpu); } +EXPORT_SYMBOL_GPL (emulator_write_emulated); static int emulator_cmpxchg_emulated(unsigned long addr, const void *old,
drivers/kvm/vmx.c +3 -3
@@ -1463,9 +1463,9 @@ ip =vmcs_readl (GUEST_RIP ); -if (kvm_write_guest (vcpu, ss_base + sp -2 ,2 , &flags) !=2 || -kvm_write_guest (vcpu, ss_base + sp -4 ,2 , &cs) !=2 || -kvm_write_guest (vcpu, ss_base + sp -6 ,2 , &ip) !=2 ) { +if (emulator_write_emulated (ss_base + sp -2 , &flags,2 , vcpu) !=X86EMUL_CONTINUE || +emulator_write_emulated (ss_base + sp -4 , &cs,2 , vcpu) !=X86EMUL_CONTINUE || +emulator_write_emulated (ss_base + sp -6 , &ip,2 , vcpu) !=X86EMUL_CONTINUE ) {vcpu_printf (vcpu,"%s: write guest err\n" , __FUNCTION__);return ; }
-------------------------------------------------------------------------
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