All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: kvm@vger.kernel.org, gleb@redhat.com, jan.kiszka@siemens.com,
	joerg.roedel@amd.com
Subject: Re: [patch 1/2] KVM: x86: handle double and triple faults for every exception
Date: Wed, 11 Nov 2009 19:40:29 -0200	[thread overview]
Message-ID: <20091111214029.GA14787@amt.cnet> (raw)
In-Reply-To: <4AFB265B.9030506@web.de>

On Wed, Nov 11, 2009 at 10:02:19PM +0100, Jan Kiszka wrote:
> Marcelo Tosatti wrote:
> > On Wed, Nov 11, 2009 at 09:07:08PM +0100, Jan Kiszka wrote:
> >> Marcelo Tosatti wrote:
> >>> From: Joerg Roedel <joerg.roedel@amd.com>
> >>>
> >>> The current KVM x86 exception code handles double and triple faults only for
> >>> page fault exceptions. This patch extends this detection for every exception
> >>> that gets queued for the guest.
> >>>
> >>> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
> >>> CC: Jan Kiszka <jan.kiszka@web.de>
> >> For a moment I felt like I was time traveling - back in '08. :)
> >>
> >> Reading the archive I noticed that someone posted a fix-up for this patch:
> >>
> >> http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/16931
> >>
> >> Why don't we need this anymore?
> > 
> > I suppose qemu-kvm's call to set_sregs (via system_reset) will end up
> > clearing pending exception?
> 
> Right, forgot for the moment that triple fault implies user space.
> 
> > 
> >> Moreover, are we sure to not regress /wrt to the cases that shall be
> >> handled serially? So far they should have triggered the WARN_ON, right?
> > 
> > Right. 
> > 
> > How can it regress though, given that serially handled exceptions are
> > not supported at the moment (you get a WARN_ON and lose the previously
> > queued anyway).
> 
> The guest so far sees the second exception as the result, now it sees
> DF. So the behavior changes from broken to broken, but I wondered if the
> current state is already so broken that this change doesn't matter.

I see your point. I suppose the WARN_ON is there to catch any code paths
that could trigger (unsupported) multiple exceptions, and apparently no
path does that now (other than pagefault which is handled separately) ?

> Another micro difference is this:
> 
> > @@ -184,24 +196,6 @@ void kvm_inject_page_fault(struct kvm_vc
> >  {
> >  	++vcpu->stat.pf_guest;
> >  
> > -	if (vcpu->arch.exception.pending) {
> > -		switch(vcpu->arch.exception.nr) {
> > -		case DF_VECTOR:
> > -			/* triple fault -> shutdown */
> > -			set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests);
> > -			return;
> > -		case PF_VECTOR:
> > -			vcpu->arch.exception.nr = DF_VECTOR;
> > -			vcpu->arch.exception.error_code = 0;
> > -			return;
> > -		default:
> > -			/* replace previous exception with a new one in a hope
> > -			   that instruction re-execution will regenerate lost
> > -			   exception */
> > -			vcpu->arch.exception.pending = false;
> > -			break;
> > -		}
> > -	}
> >  	vcpu->arch.cr2 = addr;
> >  	kvm_queue_exception_e(vcpu, PF_VECTOR, error_code);
> >  }
> 
> So far cr2 was not touched on DF, now it is.

Yep. The PF was overwritten with DF, which means the cr2 value will not
be interpreted by the guest?

> 
> Jan
> 



  reply	other threads:[~2009-11-11 21:40 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-11 19:29 [patch 0/2] Handle multiple exceptions (fixes Win2003 reboot by triple fault) Marcelo Tosatti
2009-11-11 19:29 ` [patch 1/2] KVM: x86: handle double and triple faults for every exception Marcelo Tosatti
2009-11-11 20:07   ` Jan Kiszka
2009-11-11 20:41     ` Marcelo Tosatti
2009-11-11 21:02       ` Jan Kiszka
2009-11-11 21:40         ` Marcelo Tosatti [this message]
2009-11-15 12:30           ` Avi Kivity
2009-11-12 12:26   ` Gleb Natapov
2009-11-15 12:41     ` Avi Kivity
2009-11-15 12:51       ` Gleb Natapov
2009-11-15 13:11         ` Avi Kivity
2009-11-15 14:29           ` Jan Kiszka
2009-11-15 14:34             ` Avi Kivity
2009-11-15 14:36               ` Jan Kiszka
2009-11-11 19:29 ` [patch 2/2] KVM: x86: raise TSS exception for NULL CS and SS segments Marcelo Tosatti
2009-11-12 12:21 ` [patch 0/2] Handle multiple exceptions (fixes Win2003 reboot by triple fault) Gleb Natapov
2009-11-12 12:41   ` Jan Kiszka
2009-11-12 13:05     ` Gleb Natapov
2009-11-15 12:54       ` Avi Kivity
2009-11-19 15:54         ` Gleb Natapov
2009-11-20 15:55           ` Ryan Harper
2009-11-23 16:52           ` Marcelo Tosatti
2009-11-25  9:55           ` Avi Kivity
2009-11-25 13:03           ` Marcelo Tosatti
2009-11-12 16:07   ` Marcelo Tosatti
2009-11-12 18:03     ` Gleb Natapov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091111214029.GA14787@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=gleb@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=jan.kiszka@web.de \
    --cc=joerg.roedel@amd.com \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.