From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 1/3] KVM - Add missing kvm_run initializations Date: Tue, 17 Jul 2007 11:12:53 +0300 Message-ID: <469C7A05.2070205@qumranet.com> References: <20070716192446.GA16243@c2.user-mode-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: KVM devel , LKML To: Jeff Dike Return-path: In-Reply-To: <20070716192446.GA16243-1LLyehjZOUUZWFFyALql+T+iFHGzDt/a@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org Jeff Dike wrote: > There are a bunch of missing initializations of run->exit_reason and > associated data. > > kvm_hypercall wasn't setting exit_reason at all. > > When exit_reason is KVM_EXIT_MMIO, the mmio data isn't initialized. I > don't know what it should be, so I just stuck a FIXME in there. > > There were some missing initializations of hardware_exit_reason with > KVM_EXIT_UNKNOWN, so I added those. One case had exit_reason = 0, > which I changed to KVM_EXIT_UNKNOWN. > > I did a pass over all of the return 0 paths in the exit handler > callbacks, so this should cover everything. > > Signed-off-by: Jeff Dike > -- > drivers/kvm/kvm_main.c | 3 +++ > drivers/kvm/svm.c | 3 +++ > drivers/kvm/vmx.c | 4 +++- > 3 files changed, 9 insertions(+), 1 deletion(-) > > Index: kvm/drivers/kvm/kvm_main.c > =================================================================== > --- kvm.orig/drivers/kvm/kvm_main.c > +++ kvm/drivers/kvm/kvm_main.c > @@ -1370,6 +1370,7 @@ int kvm_hypercall(struct kvm_vcpu *vcpu, > run->hypercall.ret = ret; > run->hypercall.longmode = is_long_mode(vcpu); > kvm_arch_ops->decache_regs(vcpu); > + run->exit_reason = KVM_EXIT_HYPERCALL; > return 0; > } > Aye. (And: aiiieee) > vcpu->regs[VCPU_REGS_RAX] = ret; > @@ -1928,6 +1929,8 @@ static int kvm_vcpu_ioctl_run(struct kvm > if (r == EMULATE_DO_MMIO) { > /* > * Read-modify-write. Back to userspace. > + * > + * FIXME - kvm_run->mmio not initialized > */ > kvm_run->exit_reason = KVM_EXIT_MMIO; > r = 0; > I believe that emulate_instruction will set run->mmio if it returns EMULATE_DO_MMIO. > Index: kvm/drivers/kvm/svm.c > =================================================================== > --- kvm.orig/drivers/kvm/svm.c > +++ kvm/drivers/kvm/svm.c > @@ -929,6 +929,7 @@ static int pf_interception(struct kvm_vc > return 1; > case EMULATE_DO_MMIO: > ++vcpu->stat.mmio_exits; > + /* FIXME - kvm_run->mmio not initialized */ > kvm_run->exit_reason = KVM_EXIT_MMIO; > Ditto. The rest are all good. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/