Re: [Xen-devel] [PATCH] x86/mce: handle DOMID_XEN properly in XEN_MC_msrinject
On 05/26/16 09:15, Egger, Christoph wrote: > On 26/05/16 03:07, Haozhong Zhang wrote: > > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine > > address" forgot to consider dom_xen, which fails tools/xen-mceinj when > > it's going to inject into domain DOMID_XEN (e.g. when -d option is not > > used) via XEN_MC_msrinject. Use dom_xen when the domain id DOMID_XEN is > > passed in. > > > > Signed-off-by: Haozhong Zhang> > Why not also consider DOMID_IO, DOMID_COW, DOMID_INVALID ? > In "nature" a memory error can happen everywhere anytime. > This is to align to the original behavior before commit 26646f3 and a later commit 4ddf474 "tools/xen-mceinj: Pass in GPA when injecting through MSR_MCI_ADDR", which only supported injecting MCE of address belonging to domains whose id is <= DOMID_FIRST_RESERVED (0x7FF0) or DOMID_XEN (0x7FF2). And I just found the fix in this patch is invalid. If a domain id > DOMID_FIRST_RESERVED is passed, XEN_MC_msrinject should ensure that MC_MSRINJ_F_GPADDR is not set in mc_msrinject->mcinj_flags and treat the address passed-in as machine physical address (i.e. skip the address translation in XEN_MCE_msrinject). In this way, DOMID_XEN, DOMID_COW and DOMID_INVALID can be handled properly. Thanks, Haozhong ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH] x86/mce: handle DOMID_XEN properly in XEN_MC_msrinject
On 26/05/16 03:07, Haozhong Zhang wrote: > Commit 26646f3 "x86/mce: translate passed-in GPA to host machine > address" forgot to consider dom_xen, which fails tools/xen-mceinj when > it's going to inject into domain DOMID_XEN (e.g. when -d option is not > used) via XEN_MC_msrinject. Use dom_xen when the domain id DOMID_XEN is > passed in. > > Signed-off-by: Haozhong ZhangWhy not also consider DOMID_IO, DOMID_COW, DOMID_INVALID ? In "nature" a memory error can happen everywhere anytime. Christoph > --- > xen/arch/x86/cpu/mcheck/mce.c | 9 + > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c > index cc446eb..65de627 100644 > --- a/xen/arch/x86/cpu/mcheck/mce.c > +++ b/xen/arch/x86/cpu/mcheck/mce.c > @@ -1427,17 +1427,18 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc) > > if ( mc_msrinject->mcinj_flags & MC_MSRINJ_F_GPADDR ) > { > -struct domain *d; > +domid_t domid = mc_msrinject->mcinj_domid; > +struct domain *d = (domid == DOMID_XEN) ? > + dom_xen : get_domain_by_id(domid); > struct mcinfo_msr *msr; > unsigned int i; > paddr_t gaddr; > unsigned long gfn, mfn; > p2m_type_t t; > > -d = get_domain_by_id(mc_msrinject->mcinj_domid); > if ( d == NULL ) > return x86_mcerr("do_mca inject: bad domain id %d", > - -EINVAL, mc_msrinject->mcinj_domid); > + -EINVAL, domid); > > for ( i = 0, msr = _msrinject->mcinj_msr[0]; >i < mc_msrinject->mcinj_count; > @@ -1452,7 +1453,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc) > put_gfn(d, gfn); > put_domain(d); > return x86_mcerr("do_mca inject: bad gfn %#lx of domain > %d", > - -EINVAL, gfn, > mc_msrinject->mcinj_domid); > + -EINVAL, gfn, domid); > } > > msr->value = pfn_to_paddr(mfn) | (gaddr & (PAGE_SIZE - 1)); > Amazon Development Center Germany GmbH Berlin - Dresden - Aachen main office: Krausenstr. 38, 10117 Berlin Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger Ust-ID: DE289237879 Eingetragen am Amtsgericht Charlottenburg HRB 149173 B ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
[Xen-devel] [PATCH] x86/mce: handle DOMID_XEN properly in XEN_MC_msrinject
Commit 26646f3 "x86/mce: translate passed-in GPA to host machine address" forgot to consider dom_xen, which fails tools/xen-mceinj when it's going to inject into domain DOMID_XEN (e.g. when -d option is not used) via XEN_MC_msrinject. Use dom_xen when the domain id DOMID_XEN is passed in. Signed-off-by: Haozhong Zhang--- xen/arch/x86/cpu/mcheck/mce.c | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index cc446eb..65de627 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -1427,17 +1427,18 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc) if ( mc_msrinject->mcinj_flags & MC_MSRINJ_F_GPADDR ) { -struct domain *d; +domid_t domid = mc_msrinject->mcinj_domid; +struct domain *d = (domid == DOMID_XEN) ? + dom_xen : get_domain_by_id(domid); struct mcinfo_msr *msr; unsigned int i; paddr_t gaddr; unsigned long gfn, mfn; p2m_type_t t; -d = get_domain_by_id(mc_msrinject->mcinj_domid); if ( d == NULL ) return x86_mcerr("do_mca inject: bad domain id %d", - -EINVAL, mc_msrinject->mcinj_domid); + -EINVAL, domid); for ( i = 0, msr = _msrinject->mcinj_msr[0]; i < mc_msrinject->mcinj_count; @@ -1452,7 +1453,7 @@ long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc) put_gfn(d, gfn); put_domain(d); return x86_mcerr("do_mca inject: bad gfn %#lx of domain %d", - -EINVAL, gfn, mc_msrinject->mcinj_domid); + -EINVAL, gfn, domid); } msr->value = pfn_to_paddr(mfn) | (gaddr & (PAGE_SIZE - 1)); -- 2.8.3 ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel