From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [PATCH]: pointer to vmcs getting lost Date: Fri, 1 Aug 2008 20:24:11 -0300 Message-ID: <20080801232411.GA3486@dmt.cnet> References: <48938BCC.2030402@neuraliq.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm@vger.kernel.org To: Jesse Return-path: Received: from mx1.redhat.com ([66.187.233.31]:53492 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751980AbYHAXYy (ORCPT ); Fri, 1 Aug 2008 19:24:54 -0400 Content-Disposition: inline In-Reply-To: <48938BCC.2030402@neuraliq.com> Sender: kvm-owner@vger.kernel.org List-ID: Hi Jesse, On Fri, Aug 01, 2008 at 03:18:52PM -0700, Jesse wrote: > Greetings, > > I noticed a race condition when running two guests simultaneously and > debugging both guests (on 64-bit intel cpus). Periodically I would get > errors from the vmread, vmwrite, or vmresume instructions. Some research > revealed that these errors were being caused by having an invalid vmcs > loaded. Further, I found that the vmcs is a per_cpu variable, which I > believe means that any reference to it is invalid after a context > switch. (Corrections appreciated). This means that the vmcs must be > reloaded each time the process is switched to. The preempt notifiers will do that for you. > The patch below fixed the > problem for me. > > This patch does three things. > 1. Extends the critical section in __vcpu_run to include the handling of > vmexits, where many of the vmread/writes occur. > 2. Perform a vcpu_load after we enter the critical section, and after we > return from kvm_resched. > 3. Move the call to kvm_guest_debug_pre into the critical section > (because it calls vmread/write). Wouldnt it suffice to move ->guest_debug_pre into the non preemptable section? http://article.gmane.org/gmane.comp.emulators.kvm.devel/20244 I haven't tested that patch though.