From mboxrd@z Thu Jan 1 00:00:00 1970 From: Radim =?utf-8?B?S3LEjW3DocWZ?= Subject: Re: [PATCH v2 07/13] KVM: add vcpu-specific functions to read/write/translate GFNs Date: Fri, 29 May 2015 21:23:47 +0200 Message-ID: <20150529192346.GA11651@potion.brq.redhat.com> References: <1432746314-50196-1-git-send-email-pbonzini@redhat.com> <1432746314-50196-8-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, guangrong.xiao@linux.intel.com, bdas@redhat.com To: Paolo Bonzini Return-path: Received: from mx1.redhat.com ([209.132.183.28]:55516 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422659AbbE2TXu (ORCPT ); Fri, 29 May 2015 15:23:50 -0400 Content-Disposition: inline In-Reply-To: <1432746314-50196-8-git-send-email-pbonzini@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: 2015-05-27 19:05+0200, Paolo Bonzini: > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > @@ -1616,6 +1727,27 @@ int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data, | int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data, | unsigned long len) | { | gfn_t gfn = gpa >> PAGE_SHIFT; | int seg; | int offset = offset_in_page(gpa); | int ret; | | while ((seg = next_segment(len, offset)) != 0) { | ret = kvm_write_guest_page(kvm, gfn, data, offset, seg); | if (ret < 0) | return ret; | offset = 0; | len -= seg; | data += seg; | ++gfn; | } | return 0; | } > > +int kvm_vcpu_write_guest(struct kvm_vcpu *vcpu, gpa_t gpa, const void *data, > + unsigned long len) > +{ > + gfn_t gfn = gpa >> PAGE_SHIFT; > + int seg; > + int offset = offset_in_page(gpa); > + int ret; > + > + while ((seg = next_segment(len, offset)) != 0) { > + ret = kvm_vcpu_write_guest_page(vcpu, gfn, data, offset, seg); > + if (ret < 0) > + return ret; > + offset = 0; > + len -= seg; > + data += seg; > + ++gfn; > + } > + return 0; > +} (There is no need to pass vcpu, and kvm, in this API. Extracting memslots early will help to keep more code common. I have patches that did a superset of this for the old API, so posting them after this series is finalized will be simple.)