From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH v2 0/3] Fix task switches into/out of VM86 Date: Mon, 30 Jan 2012 12:50:22 +0200 Message-ID: <20120130105022.GC23536@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> <4F2674BB.2000608@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Kevin Wolf , kvm@vger.kernel.org, joerg.roedel@amd.com, yoshikawa.takuya@oss.ntt.co.jp, mtosatti@redhat.com To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:56454 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751202Ab2A3Ku2 convert rfc822-to-8bit (ORCPT ); Mon, 30 Jan 2012 05:50:28 -0500 Content-Disposition: inline In-Reply-To: <4F2674BB.2000608@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Jan 30, 2012 at 12:45:15PM +0200, Avi Kivity wrote: > 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 process= or and it looks > > >>>> as good as it gets, but it would be better if you could confir= m. > > >>>> > > >>> You forgot to set cpl to 3 in vmcb in svm_set_rflags() when vm8= 6 is enabled, no? > > >> > > >> SVM updates the CPL when the segment selector for CS is loaded. = =46rom a > > >> svm.c POV, segment selectors are updated immediately after set_r= flags, > > >> 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 a= fter > > > 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 t= o say > > that CPL only changes when cs is reloaded, but you could argue that= it's > > effective with the reload of rflags. It doesn't make a difference t= o > > guests, so we can decide to choose whatever we like. >=20 > 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. This is what vmx does, not svm. svm checks vmcb->cpl that can be outdated during emulation. > Making it depend = on > 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 = the > wrong cpl until the jmp instruction is executed. >=20 > > > > Depending on what we decide on (Gleb and I disagree on this, so mor= e > > 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. >=20 > Right. IMO we should follow svm and make vmx be more flexible. >=20 > 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 >=20 >=20 > --=20 > error compiling committee.c: too many arguments to function -- Gleb.