From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH v2 0/3] Fix task switches into/out of VM86 Date: Mon, 30 Jan 2012 12:45:15 +0200 Message-ID: <4F2674BB.2000608@redhat.com> References: <1327692216-20450-1-git-send-email-kwolf@redhat.com> <20120127195239.GB2938@redhat.com> <4F265961.3070501@redhat.com> <20120130085541.GI30469@redhat.com> <4F267254.7040900@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Gleb Natapov , kvm@vger.kernel.org, joerg.roedel@amd.com, yoshikawa.takuya@oss.ntt.co.jp, mtosatti@redhat.com To: Kevin Wolf Return-path: Received: from mx1.redhat.com ([209.132.183.28]:61170 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750930Ab2A3KpV (ORCPT ); Mon, 30 Jan 2012 05:45:21 -0500 In-Reply-To: <4F267254.7040900@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 01/30/2012 12:35 PM, Kevin Wolf wrote: > Am 30.01.2012 09:55, schrieb Gleb Natapov: > > On Mon, Jan 30, 2012 at 09:48:33AM +0100, Kevin Wolf wrote: > >> Am 27.01.2012 20:52, schrieb Gleb Natapov: > >>> On Fri, Jan 27, 2012 at 08:23:33PM +0100, Kevin Wolf wrote: > >>>> I believe this should work with both VMX and SVM now. Gleb, J=C3= =B6rg, can one of > >>>> you test this with SVM? I did some testing on my buggy processor= and it looks > >>>> as good as it gets, but it would be better if you could confirm. > >>>> > >>> You forgot to set cpl to 3 in vmcb in svm_set_rflags() when vm86 = is enabled, no? > >> > >> SVM updates the CPL when the segment selector for CS is loaded. Fr= om a > >> svm.c POV, segment selectors are updated immediately after set_rfl= ags, > >> so it wouldn't really make a difference to do it twice. > >> > > It is too subtle to rely on that. The fact is that checking cpl aft= er > > set_rflags provides incorrect value. This better be fixed. > > Depends on what value you consider to be correct between reloading > eflags and reloading cs. I think it's logical and more consistent to = say > that CPL only changes when cs is reloaded, but you could argue that i= t's > effective with the reload of rflags. It doesn't make a difference to > guests, so we can decide to choose whatever we like. It's best to make it independent (like svm, and force vmx to emulate this behaviour). Real mode forces cpl to 0, vm86 forces cpl to 3, protected mode (and I think long mode) uses cs.rpl. Making it depend o= n the mode causes subtle issues during the mode switch - if you switch from real mode to protected mode while cs & 3 !=3D 0 you end up with th= e wrong cpl until the jmp instruction is executed. > > Depending on what we decide on (Gleb and I disagree on this, so more > input would be helpful), either VMX or SVM need a cleanup. I think it > can be done independent from and on top of this fix. Right. IMO we should follow svm and make vmx be more flexible. One way to do it is to have a new variable for vmx cpl, and reconcile all the places where cpl is stored (cs.rpl, ss.rpl, cr0.pe, rflags.vm) just before entry. If we can't reconcile it, we have to emulate. --=20 error compiling committee.c: too many arguments to function