From: Gleb Natapov <gleb@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org,
Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>,
Jun Nakajima <jun.nakajima@intel.com>,
Yang Zhang <yang.z.zhang@intel.com>
Subject: Re: [PATCH v4 06/13] nEPT: Add EPT tables support to paging_tmpl.h
Date: Mon, 29 Jul 2013 19:43:00 +0300 [thread overview]
Message-ID: <20130729164300.GC28372@redhat.com> (raw)
In-Reply-To: <51F69835.2070102@redhat.com>
On Mon, Jul 29, 2013 at 06:28:37PM +0200, Paolo Bonzini wrote:
> Il 29/07/2013 18:14, Gleb Natapov ha scritto:
> >>>>>> > >>>> accessed_dirty &=
> >>>>>> > >>>> pte >> (PT_DIRTY_SHIFT - PT_ACCESSED_SHIFT);
> >>>>>> > >>>>
> >>>>>> > >>>> if (PT_GUEST_DIRTY_MASK != 0 && unlikely(!accessed_dirty)) {
> >>>>>> > >>>>
> >>>>>> > >>>> the obvious reaction is "what, is there a case where I'm using
> >>>>>> > >>>> accessed_dirty if PT_GUEST_DIRTY_MASK == 0?" Of course it makes sense
> >>>>> > >>> In this case accessed_dirty has correct value of 0 :) The if() bellow just
> >>>>> > >>> tells you that since A/D is not supported there is nothing to be done
> >>>>> > >>> about zero value of accessed_dirty, but the value itself is correct!
> >>>> > >>
> >>>> > >> It is correct because accessed_dirty is initialized to 0. But the "&"
> >>>> > >> with a bit taken out of thin air (bit 0 of the PTE)? That's just
> >>>> > >> disgusting. :)
> >>>> > >>
> >>> > > Sorry to disgust you, but the code relies on this "&" trick with or
> >>> > > without the patch. It clears all unrelated bits from pte this way. No
> >>> > > new disgusting tricks are added by the patch.
> >> >
> >> > Oh the code is not disgusting at all! It is very nice to follow.
> >> >
> >> > The new disgusting ;) trick is that here in the EPT case you're
> >> > effectively doing
> >> >
> >> > accessed_dirty &= pte;
> >> >
> >> > where bit 0 is the "R" bit (iirc) and has absolutely nothing to do with
> >> > dirty or accessed.
> >
> > What bit 0 has to do with anything? Non ept code after shift also has
> > random bits and random places in ept (R at P place, U at R place), the
> > trick is that accessed_dirty masks bits we are not interesting in and
> > capture only those we want to follow (accessed in regular case, non in
> > ept case). This is exactly what original code is doing, so they are
> > either both disgusting or both very nice to follow :)
>
> The comment is clear: "fold the dirty bit into accessed_dirty by
> shifting it one place right". In the EPT case the comment makes no
> sense and it is not obvious that you rely on accessed_dirty=0 even
> before that line.
It is not obvious that the code relies on accessed_dirty been initialized
to the bits the code wants to track at the start of the function. It
wasn't for me. With if() it would have been much clearer, but the
current way is faster.
>
> That's why I'd rather have that code out of the PT_GUEST_DIRTY_MASK==0 case.
>
What problem current code has that you are trying to fix? What _technical_
justification you provide? There is no point adding ifdefs where they
are clearly not needed just because.
--
Gleb.
next prev parent reply other threads:[~2013-07-29 16:43 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-25 10:59 [PATCH v4 00/13] Nested EPT Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 01/13] nEPT: Support LOAD_IA32_EFER entry/exit controls for L1 Gleb Natapov
2013-07-29 8:32 ` Paolo Bonzini
2013-07-29 13:12 ` Gleb Natapov
2013-07-29 14:13 ` Paolo Bonzini
2013-07-25 10:59 ` [PATCH v4 02/13] nEPT: Fix cr3 handling in nested exit and entry Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 03/13] nEPT: Fix wrong test in kvm_set_cr3 Gleb Natapov
2013-07-29 8:36 ` Paolo Bonzini
2013-07-29 10:43 ` Gleb Natapov
2013-07-31 8:02 ` Xiao Guangrong
2013-07-25 10:59 ` [PATCH v4 04/13] nEPT: Move common code to paging_tmpl.h Gleb Natapov
2013-07-31 8:02 ` Xiao Guangrong
2013-07-31 8:36 ` Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 05/13] nEPT: make guest's A/D bits depends on guest's paging mode Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 06/13] nEPT: Add EPT tables support to paging_tmpl.h Gleb Natapov
2013-07-29 9:48 ` Paolo Bonzini
2013-07-29 11:33 ` Gleb Natapov
2013-07-29 11:55 ` Paolo Bonzini
2013-07-29 12:24 ` Gleb Natapov
2013-07-29 13:19 ` Paolo Bonzini
2013-07-29 13:27 ` Gleb Natapov
2013-07-29 14:15 ` Paolo Bonzini
2013-07-29 16:14 ` Gleb Natapov
2013-07-29 16:28 ` Paolo Bonzini
2013-07-29 16:43 ` Gleb Natapov [this message]
2013-07-29 17:06 ` Paolo Bonzini
2013-07-29 17:11 ` Gleb Natapov
2013-07-30 10:03 ` Paolo Bonzini
2013-07-30 11:56 ` Gleb Natapov
2013-07-30 12:13 ` Paolo Bonzini
2013-07-30 14:22 ` Gleb Natapov
2013-07-30 14:36 ` Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 07/13] nEPT: Redefine EPT-specific link_shadow_page() Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 08/13] nEPT: Nested INVEPT Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 09/13] nEPT: Add nEPT violation/misconfigration support Gleb Natapov
2013-07-29 8:59 ` Paolo Bonzini
2013-07-29 10:52 ` Gleb Natapov
2013-07-29 10:59 ` Paolo Bonzini
2013-07-29 11:43 ` Gleb Natapov
2013-07-29 12:05 ` Paolo Bonzini
2013-07-29 12:34 ` Gleb Natapov
2013-07-29 13:11 ` Paolo Bonzini
2013-07-29 13:20 ` Gleb Natapov
2013-07-29 14:12 ` Paolo Bonzini
2013-07-29 16:24 ` Gleb Natapov
2013-07-29 16:36 ` Paolo Bonzini
2013-07-29 16:54 ` Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 10/13] nEPT: MMU context for nested EPT Gleb Natapov
2013-07-25 10:59 ` [PATCH v4 11/13] nEPT: Advertise EPT to L1 Gleb Natapov
2013-07-29 9:21 ` Paolo Bonzini
2013-07-29 11:11 ` Gleb Natapov
2013-07-29 11:33 ` Paolo Bonzini
2013-07-29 11:35 ` Gleb Natapov
2013-07-25 11:00 ` [PATCH v4 12/13] nEPT: Some additional comments Gleb Natapov
2013-07-25 11:00 ` [PATCH v4 13/13] nEPT: Miscelleneous cleanups 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=20130729164300.GC28372@redhat.com \
--to=gleb@redhat.com \
--cc=jun.nakajima@intel.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=xiaoguangrong@linux.vnet.ibm.com \
--cc=yang.z.zhang@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox