From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH v2 1/2] x86/mm: Add information about faulted page's presence to npfec structure Date: Fri, 18 Dec 2015 03:15:21 -0700 Message-ID: <5673EAC902000078000C1127@prv-mh.provo.novell.com> References: <1450383771-3636-1-git-send-email-boris.ostrovsky@oracle.com> <1450383771-3636-2-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1450383771-3636-2-git-send-email-boris.ostrovsky@oracle.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Boris Ostrovsky Cc: andrew.cooper3@citrix.com, Kevin Tian , keir@xen.org, Jun Nakajima , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org >>> On 17.12.15 at 21:22, wrote: > This is provided explicitly in SVM and implicitly in VMX (when neither of > the three EPT_EFFECTIVE_* bits is set). > > Signed-off-by: Boris Ostrovsky Reviewed-by: Jan Beulich Retaining full context since you failed to Cc the VMX maintainers, which I've no done. Jan > --- > xen/arch/x86/hvm/svm/svm.c | 3 ++- > xen/arch/x86/hvm/vmx/vmx.c | 5 ++++- > xen/include/xen/mm.h | 1 + > 3 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c > index 0078100..a66d854 100644 > --- a/xen/arch/x86/hvm/svm/svm.c > +++ b/xen/arch/x86/hvm/svm/svm.c > @@ -1491,7 +1491,8 @@ static void svm_do_nested_pgfault(struct vcpu *v, > struct npfec npfec = { > .read_access = !(pfec & PFEC_insn_fetch), > .write_access = !!(pfec & PFEC_write_access), > - .insn_fetch = !!(pfec & PFEC_insn_fetch) > + .insn_fetch = !!(pfec & PFEC_insn_fetch), > + .present = !!(pfec & PFEC_page_present), > }; > > /* These bits are mutually exclusive */ > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > index 2922673..7ea1882 100644 > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -2746,7 +2746,10 @@ static void ept_handle_violation(unsigned long > qualification, paddr_t gpa) > .read_access = !!(qualification & EPT_READ_VIOLATION) || > !!(qualification & EPT_WRITE_VIOLATION), > .write_access = !!(qualification & EPT_WRITE_VIOLATION), > - .insn_fetch = !!(qualification & EPT_EXEC_VIOLATION) > + .insn_fetch = !!(qualification & EPT_EXEC_VIOLATION), > + .present = !!(qualification & (EPT_EFFECTIVE_READ | > + EPT_EFFECTIVE_WRITE | > + EPT_EFFECTIVE_EXEC)) > }; > > if ( tb_init_done ) > diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h > index 5d4b64b..a795dd6 100644 > --- a/xen/include/xen/mm.h > +++ b/xen/include/xen/mm.h > @@ -159,6 +159,7 @@ struct npfec { > unsigned int read_access:1; > unsigned int write_access:1; > unsigned int insn_fetch:1; > + unsigned int present:1; > unsigned int gla_valid:1; > unsigned int kind:2; /* npfec_kind_t */ > }; > -- > 1.7.1