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:14:44 +0300 [thread overview]
Message-ID: <20130729161444.GA28372@redhat.com> (raw)
In-Reply-To: <51F678F4.5020200@redhat.com>
On Mon, Jul 29, 2013 at 04:15:16PM +0200, Paolo Bonzini wrote:
> Il 29/07/2013 15:27, Gleb Natapov ha scritto:
> >>>> doesn't look bad at all. With the old check on EPT it looked ugly, but
> >>>> with the new check on PT_GUEST_DIRTY_MASK it is quite natural. Also
> >>>> because you have anyway a reference to PT_GUEST_DIRTY_MASK in the "if".
> >>>> If I see
> >>>>
> >>>> if (!write_fault)
> >>>> protect_clean_gpte(&pte_access, pte);
> >>>> else
> >>>> /*
> >>>> * On a write fault, fold the dirty bit into
> >>>> * accessed_dirty by
> >>>> * shifting it one place right.
> >>>> */
> >>>> 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 :)
--
Gleb.
next prev parent reply other threads:[~2013-07-29 16:14 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 [this message]
2013-07-29 16:28 ` Paolo Bonzini
2013-07-29 16:43 ` Gleb Natapov
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=20130729161444.GA28372@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