|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 19/19] tools/xen-mceinj: support injecting LMCE
On 02/20/17 12:53 +0000, Wei Liu wrote:
> On Fri, Feb 17, 2017 at 02:39:36PM +0800, Haozhong Zhang wrote:
> > If option '-l' or '--lmce' is specified and the host supports LMCE,
> > xen-mceinj will inject LMCE to CPU specified by '-c' (or CPU0 if '-c'
> > is not present).
> >
> > Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>
> > ---
> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
> > ---
> > tools/libxc/include/xenctrl.h | 1 +
> > tools/libxc/xc_misc.c | 25 +++++++++++++++
>
> I suggest you split out changes to libxc to a separate patch.
>
will do in the next version
> > tools/tests/mce-test/tools/xen-mceinj.c | 57
> > +++++++++++++++++++++++++++++++--
> > 3 files changed, 81 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
> > index 85d7fe5..2598952 100644
> > --- a/tools/libxc/include/xenctrl.h
> > +++ b/tools/libxc/include/xenctrl.h
> > @@ -1968,6 +1968,7 @@ int xc_cpuid_apply_policy(xc_interface *xch,
> > void xc_cpuid_to_str(const unsigned int *regs,
> > char **strs); /* some strs[] may be NULL if ENOMEM */
> > int xc_mca_op(xc_interface *xch, struct xen_mc *mc);
> > +int xc_mca_op_cpumap(xc_interface *xch, struct xen_mc *mc, xc_cpumap_t
> > cpumap);
> > #endif
> >
> > struct xc_px_val {
> > diff --git a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c
> > index 0fc6c22..24f7fdf 100644
> > --- a/tools/libxc/xc_misc.c
> > +++ b/tools/libxc/xc_misc.c
> > @@ -341,6 +341,31 @@ int xc_mca_op(xc_interface *xch, struct xen_mc *mc)
> > xc_hypercall_bounce_post(xch, mc);
> > return ret;
> > }
> > +
> > +int xc_mca_op_cpumap(xc_interface *xch, struct xen_mc *mc, xc_cpumap_t
> > cpumap)
> > +{
> > + int ret;
> > + DECLARE_HYPERCALL_BOUNCE(cpumap, 0, XC_HYPERCALL_BUFFER_BOUNCE_IN);
> > +
> > + if ( cpumap )
> > + {
> > + HYPERCALL_BOUNCE_SET_SIZE(cpumap,
> > + (mc->u.mc_inject_v2.cpumap.nr_bits + 7)
> > / 8);
> > + if ( xc_hypercall_bounce_pre(xch, cpumap) )
> > + {
> > + PERROR("Could not bouce cpumap memory buffer");
> > + return -1;
> > + }
> > + set_xen_guest_handle(mc->u.mc_inject_v2.cpumap.bitmap, cpumap);
> > + }
> > +
> > + ret = xc_mca_op(xch, mc);
> > +
> > + if ( cpumap )
> > + xc_hypercall_bounce_post(xch, cpumap);
> > +
> > + return ret;
> > +}
>
> I kinda see why you did this: the bounce buffer infrastructure isn't
> available to userspace program (by design). But this API isn't nice.
>
> This function replaces part of the struct. I suggest you construct a
> xen_mc struct solely within this function, not doing part of it here and
> the other part in another place (inject_lmce below). Then you also need
> to name it properly.
>
ditto
> > #endif
> >
> > int xc_perfc_reset(xc_interface *xch)
> > diff --git a/tools/tests/mce-test/tools/xen-mceinj.c
> > b/tools/tests/mce-test/tools/xen-mceinj.c
> > index 5f70a61..b2eb7d3 100644
> > --- a/tools/tests/mce-test/tools/xen-mceinj.c
> > +++ b/tools/tests/mce-test/tools/xen-mceinj.c
> > @@ -56,6 +56,8 @@
> > #define MSR_IA32_MC0_MISC 0x00000403
> > #define MSR_IA32_MC0_CTL2 0x00000280
> >
> > +#define MCG_STATUS_LMCE 0x8
> > +
> > struct mce_info {
> > const char *description;
> > uint8_t mcg_stat;
> > @@ -113,6 +115,7 @@ static struct mce_info mce_table[] = {
> > #define LOGFILE stdout
> >
> > int dump;
> > +int lmce;
> > struct xen_mc_msrinject msr_inj;
> >
> > static void Lprintf(const char *fmt, ...)
> > @@ -213,6 +216,42 @@ static int inject_mce(xc_interface *xc_handle, int
> > cpu_nr)
> > return xc_mca_op(xc_handle, &mc);
> > }
> >
> > +static int inject_lmce(xc_interface *xc_handle, uint32_t cpu_nr)
> > +{
> > + struct xen_mc mc;
> > + uint8_t *cpumap = NULL;
> > + size_t cpumap_size, line, shift;
> > + uint32_t nr_cpus;
> > + int ret;
> > +
> > + nr_cpus = mca_cpuinfo(xc_handle);
> > + if ( !nr_cpus )
> > + err(xc_handle, "Failed to get mca_cpuinfo");
>
> Why xc_handle in err()?
>
err() needs to close xc_handle.
Thanks,
Haozhong
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |