From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=37743 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OHj5E-0002bu-DC for qemu-devel@nongnu.org; Thu, 27 May 2010 15:49:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OHj5D-0005Jz-2G for qemu-devel@nongnu.org; Thu, 27 May 2010 15:49:36 -0400 Received: from hera.amn.nl ([213.189.22.5]:1289 helo=AMN.nl) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OHj5C-0005JS-UJ for qemu-devel@nongnu.org; Thu, 27 May 2010 15:49:35 -0400 Message-ID: <4BFECCC3.2000806@cs.vu.nl> Date: Thu, 27 May 2010 21:49:23 +0200 From: Erik van der Kouwe MIME-Version: 1.0 References: <4BFE8F13.2000009@cs.vu.nl> <4BFEBF9E.90600@web.de> In-Reply-To: <4BFEBF9E.90600@web.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: SVM emulation: EVENTINJ marked valid when a pagefault happens while issuing a software interrupt List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Joerg Roedel , qemu-devel@nongnu.org, Gleb Natapov Hi, > Be warned: Though my experience is already more than a year old, the SVM > emulation in QEMU is most probably not yet rock-stable. Always check > suspicious behavior against real hardware and/or the spec. [ As real > hardware is everywhere, nesting works with KVM+SVM and is much faster, > motivation to improve QEMU in this area is unfortunately limited. ] Problem is: I'm compiling in Linux and testing in MINIX. Testing on the real hardware would require a reboot everytime. Moreover, it might screw up my system if I make bad mistakes (the MINIX filesystem is easily corrupted). That said, I do aim to eventually test the real hardware. Plenty of virtualization capable hardware where I work, although unfortunately all Intel. >> This issue is easy to work around by clearing the EVENTINJ field on each >> #VMEXIT (and I have submitted a patch to that effect to the Palacios >> people) and this approach is also found in KVM. > > /me does not find such clearing in KVM - what line(s) are you looking at? Linux source tree (2.6.31-ubuntu), arch/x86/kvm/svm.c, end of function nested_svm_vmrun. Here event_inj and event_inj_err are copied from a different VMCB, effectively clearing the value set by the CPU. Maybe this isn't were I should have been looking though? >> The relevant code is in target-i386/op_helper.c. The "handle_even_inj" >> function sets the EVENTINJ field (called event_inf in the QEMU code) and >> the helper_vmexit function copies that field into EXITINTINFO >> (exit_int_info in the QEMU code). I believe (but once again, am not >> certain) that the SVM documentation only says that this information >> should be stored in EXITINTINFO. > > Yes, this also looks suspicious. handle_even_inj should not push the > real (level 1) event to be injected into event_inj[_err] but into > exit_int_info[_err] or some temporary fields from which the exit info is > then loaded later on. Yes, if this is indeed incorrect behaviour then this is what I would expect a fix to be like. Thanks again, Erik