From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] x86: handle double and triple faults for every exception Date: Wed, 30 Apr 2008 13:52:02 +0300 Message-ID: <48184F52.4050002@qumranet.com> References: <1209481325-14892-1-git-send-email-joerg.roedel@amd.com> <48183198.1050508@siemens.com> <48184108.7050000@qumranet.com> <48184D07.2090409@siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel@lists.sourceforge.net To: Jan Kiszka Return-path: In-Reply-To: <48184D07.2090409@siemens.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org Jan Kiszka wrote: >>> Clear the pending original exception when raising a triple fault. This >>> allows to re-use the vcpu instance, e.g. after a reset which is >>> typically issued as reaction on the triple fault. >>> >>> Signed-off-by: Jan Kiszka >>> >>> --- >>> arch/x86/kvm/x86.c | 4 +++- >>> 1 file changed, 3 insertions(+), 1 deletion(-) >>> >>> Index: b/arch/x86/kvm/x86.c >>> =================================================================== >>> --- a/arch/x86/kvm/x86.c >>> +++ b/arch/x86/kvm/x86.c >>> @@ -149,8 +149,10 @@ static void handle_multiple_faults(struc >>> if (vcpu->arch.exception.nr != DF_VECTOR) { >>> vcpu->arch.exception.nr = DF_VECTOR; >>> vcpu->arch.exception.error_code = 0; >>> - } else >>> + } else { >>> set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests); >>> + vcpu->arch.exception.pending = false; >>> + } >>> } >>> >>> void kvm_queue_exception(struct kvm_vcpu *vcpu, unsigned nr) >>> >>> >>> >> There's a bigger problem here. The exception queue is hidden state that >> qemu and load and save. >> > > Could you elaborate a bit on what the problematic scenario precisely is > (that pending triple faults would not be saved/restored while pending > exceptions are?), and if I/we can do anything to resolve it? > Two scenarios: savevm (no pending exception) guest runs... loadvm (with a pending exception in the current state) spurious exception injected savevm (pending exception, lost) new qemu instance (or live migration) loadvm (exception not delivered) The second scenario is not too bad, I guess: for fault-like exceptions, the first instruction would fault again and the exception would be regenerated. The first scenario is bad, but I guess very unlikely. One fix would be to expose the exception queue to userspace. I don't like it since this is not x86 architectural state but a kvm artifact. Maybe we should clear the exception queue on kvm_set_sregs() (that should fix the reset case as well). -- Any sufficiently difficult bug is indistinguishable from a feature. ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone