From: Avi Kivity <avi@redhat.com>
To: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
Gleb Natapov <gleb@redhat.com>,
LKML <linux-kernel@vger.kernel.org>, KVM <kvm@vger.kernel.org>
Subject: Re: [PATCH v4 3/3] KVM: MMU: retry #PF for softmmu
Date: Mon, 06 Dec 2010 11:48:00 +0200 [thread overview]
Message-ID: <4CFCB150.40202@redhat.com> (raw)
In-Reply-To: <4CF76B06.6050708@cn.fujitsu.com>
On 12/02/2010 11:46 AM, Xiao Guangrong wrote:
> Retry #PF for softmmu only when the current vcpu has the same cr3 as the time
> when #PF occurs
>
> Changelog:
> Just compare cr3 value since It's harmless to instantiate an spte for an
> unused translation from Marcelo's comment
>
It's not harmless. We could be in a different process, so we have to
re-fetch the gpte. Or we could have switched from one nested guest to
another.
>
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index c6bb449..3f0d9a0 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -2607,9 +2607,11 @@ static int nonpaging_page_fault(struct kvm_vcpu *vcpu, gva_t gva,
> static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
> {
> struct kvm_arch_async_pf arch;
> +
> arch.token = (vcpu->arch.apf.id++<< 12) | vcpu->vcpu_id;
> arch.gfn = gfn;
> arch.direct_map = vcpu->arch.mmu.direct_map;
> + arch.cr3 = vcpu->arch.mmu.get_cr3(vcpu);
>
> return kvm_setup_async_pf(vcpu, gva, gfn,&arch);
> }
> diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
> index 23275d0..437e11a 100644
> --- a/arch/x86/kvm/paging_tmpl.h
> +++ b/arch/x86/kvm/paging_tmpl.h
> @@ -116,7 +116,7 @@ static unsigned FNAME(gpte_access)(struct kvm_vcpu *vcpu, pt_element_t gpte)
> */
> static int FNAME(walk_addr_generic)(struct guest_walker *walker,
> struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
> - gva_t addr, u32 access)
> + gva_t addr, u32 access, bool prefault)
> {
> pt_element_t pte;
> gfn_t table_gfn;
> @@ -194,6 +194,13 @@ walk:
> #endif
>
> if (!eperm&& !rsvd_fault&& !(pte& PT_ACCESSED_MASK)) {
> + /*
> + * Don't set gpte accessed bit if it's on
> + * speculative path.
> + */
> + if (prefault)
> + goto error;
It's actually legal to set the accessed bit on speculative access.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2010-12-06 9:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-02 9:44 [PATCH v4 1/3] KVM: MMU: rename 'no_apf' to 'prefault' Xiao Guangrong
2010-12-02 9:45 ` [PATCH v4 2/3] KVM: MMU: fix accessed bit set on prefault path Xiao Guangrong
2010-12-02 9:46 ` [PATCH v4 3/3] KVM: MMU: retry #PF for softmmu Xiao Guangrong
2010-12-06 9:48 ` Avi Kivity [this message]
2010-12-06 10:22 ` Xiao Guangrong
2010-12-06 13:17 ` Avi Kivity
2010-12-02 9:51 ` Xiao Guangrong
2010-12-03 20:30 ` [PATCH v4 1/3] KVM: MMU: rename 'no_apf' to 'prefault' Marcelo Tosatti
2010-12-06 9:32 ` 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=4CFCB150.40202@redhat.com \
--to=avi@redhat.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=xiaoguangrong@cn.fujitsu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.