From: Paolo Bonzini <pbonzini@redhat.com>
To: Jun Nakajima <jun.nakajima@intel.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH 02/11] nEPT: Add EPT tables support to paging_tmpl.h
Date: Mon, 29 Apr 2013 17:05:58 +0200 [thread overview]
Message-ID: <517E8C56.4080105@redhat.com> (raw)
In-Reply-To: <1366958611-6935-2-git-send-email-jun.nakajima@intel.com>
Il 26/04/2013 08:43, Jun Nakajima ha scritto:
> This is the first patch in a series which adds nested EPT support to KVM's
> nested VMX. Nested EPT means emulating EPT for an L1 guest so that L1 can use
> EPT when running a nested guest L2. When L1 uses EPT, it allows the L2 guest
> to set its own cr3 and take its own page faults without either of L0 or L1
> getting involved. This often significanlty improves L2's performance over the
> previous two alternatives (shadow page tables over EPT, and shadow page
> tables over shadow page tables).
>
> This patch adds EPT support to paging_tmpl.h.
>
> paging_tmpl.h contains the code for reading and writing page tables. The code
> for 32-bit and 64-bit tables is very similar, but not identical, so
> paging_tmpl.h is #include'd twice in mmu.c, once with PTTTYPE=32 and once
> with PTTYPE=64, and this generates the two sets of similar functions.
>
> There are subtle but important differences between the format of EPT tables
> and that of ordinary x86 64-bit page tables, so for nested EPT we need a
> third set of functions to read the guest EPT table and to write the shadow
> EPT table.
>
> So this patch adds third PTTYPE, PTTYPE_EPT, which creates functions (prefixed
> with "EPT") which correctly read and write EPT tables.
>
> Signed-off-by: Nadav Har'El <nyh@il.ibm.com>
> Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
> Signed-off-by: Xinhao Xu <xinhao.xu@intel.com>
> ---
> arch/x86/kvm/mmu.c | 35 ++----------
> arch/x86/kvm/paging_tmpl.h | 133 ++++++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 130 insertions(+), 38 deletions(-)
I would split this patch so that first prefetch_invalid_gpte and
gpte_access are moved to paging_tmpl.h (adding the FNAME everywhere).
The second patch then can add the EPT special cases.
>
> +static inline int FNAME(check_write_user_access)(struct kvm_vcpu *vcpu,
> + bool write_fault, bool user_fault,
> + unsigned long pte)
> +{
> +#if PTTYPE == PTTYPE_EPT
> + if (unlikely(write_fault && !(pte & VMX_EPT_WRITABLE_MASK)
> + && (user_fault || is_write_protection(vcpu))))
> + return false;
> + return true;
> +#else
> + u32 access = ((kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0)
> + | (write_fault ? PFERR_WRITE_MASK : 0);
>
> + return !permission_fault(vcpu->arch.walk_mmu, vcpu->arch.access, access);
> +#endif
> +}
> +
I think check_write_user_access doesn't exist anymore? Perhaps a wrong
conflict resolution.
Paolo
next prev parent reply other threads:[~2013-04-29 15:06 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-26 6:43 [PATCH 01/11] nEPT: Support LOAD_IA32_EFER entry/exit controls for L1 Jun Nakajima
2013-04-26 6:43 ` [PATCH 02/11] nEPT: Add EPT tables support to paging_tmpl.h Jun Nakajima
2013-04-26 6:43 ` [PATCH 03/11] nEPT: MMU context for nested EPT Jun Nakajima
2013-04-26 6:43 ` [PATCH 04/11] nEPT: Fix cr3 handling in nested exit and entry Jun Nakajima
2013-04-26 6:43 ` [PATCH 05/11] nEPT: Fix wrong test in kvm_set_cr3 Jun Nakajima
2013-04-26 6:43 ` [PATCH 06/11] nEPT: Some additional comments Jun Nakajima
2013-04-26 6:43 ` [PATCH 07/11] nEPT: Advertise EPT to L1 Jun Nakajima
2013-04-26 6:43 ` [PATCH 08/11] nEPT: Nested INVEPT Jun Nakajima
2013-04-26 6:43 ` [PATCH 09/11] nEPT: Documentation Jun Nakajima
2013-04-26 6:43 ` [PATCH 10/11] nEPT: Miscelleneous cleanups Jun Nakajima
2013-04-26 6:43 ` [PATCH 11/11] nEPT: Provide the correct exit qualification upon EPT Jun Nakajima
2013-04-27 6:42 ` Xu, Xinhao
2013-04-28 9:35 ` Jan Kiszka
2013-05-02 6:59 ` Xu, Xinhao
2013-05-02 8:50 ` Jan Kiszka
2013-04-29 15:37 ` Paolo Bonzini
2013-04-29 15:50 ` Nakajima, Jun
2013-04-29 15:12 ` [PATCH 10/11] nEPT: Miscelleneous cleanups Paolo Bonzini
2013-04-28 9:22 ` [PATCH 07/11] nEPT: Advertise EPT to L1 Jan Kiszka
2013-04-29 15:05 ` Paolo Bonzini [this message]
2013-05-02 23:54 ` [PATCH 02/11] nEPT: Add EPT tables support to paging_tmpl.h Marcelo Tosatti
2013-05-03 17:27 ` Nakajima, Jun
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=517E8C56.4080105@redhat.com \
--to=pbonzini@redhat.com \
--cc=jun.nakajima@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox