From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Haozhong Zhang <haozhong.zhang@intel.com>
Cc: Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
xen-devel@lists.xen.org
Subject: Re: [PATCH v9 7/7] tools/xen-mceinj: add support of injecting LMCE
Date: Wed, 12 Jul 2017 09:26:32 -0400 [thread overview]
Message-ID: <20170712132632.GG14252@char.us.oracle.com> (raw)
In-Reply-To: <20170712020440.777-8-haozhong.zhang@intel.com>
On Wed, Jul 12, 2017 at 10:04:40AM +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@intel.com>
> Acked-by: Wei Liu <wei.liu2@citrix.com>
> ---
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Wei Liu <wei.liu2@citrix.com>
> ---
> tools/tests/mce-test/tools/xen-mceinj.c | 50 +++++++++++++++++++++++++++++++--
> 1 file changed, 48 insertions(+), 2 deletions(-)
>
> diff --git a/tools/tests/mce-test/tools/xen-mceinj.c b/tools/tests/mce-test/tools/xen-mceinj.c
> index bae5a46eb5..380e42190c 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, ...)
> @@ -212,6 +215,35 @@ 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, unsigned int cpu)
> +{
> + uint8_t *cpumap = NULL;
> + size_t cpumap_size, line, shift;
> + unsigned int nr_cpus;
> + int ret;
> +
> + nr_cpus = mca_cpuinfo(xc_handle);
> + if ( !nr_cpus )
> + err(xc_handle, "Failed to get mca_cpuinfo");
> + if ( cpu >= nr_cpus )
> + err(xc_handle, "-c %u is larger than %u", cpu, nr_cpus - 1);
> +
> + cpumap_size = (nr_cpus + 7) / 8;
bitmap_size
> + cpumap = malloc(cpumap_size);
bitmap_alloc ?
> + if ( !cpumap )
> + err(xc_handle, "Failed to allocate cpumap\n");
> + memset(cpumap, 0, cpumap_size);
bitmap_clear?
> + line = cpu / 8;
BITMAP_ENTRY?
> + shift = cpu % 8;
BITMAP_SHIFT?
> + memset(cpumap + line, 1 << shift, 1);
> +
> + ret = xc_mca_op_inject_v2(xc_handle, XEN_MC_INJECT_TYPE_LMCE,
> + cpumap, cpumap_size * 8);
> +
> + free(cpumap);
> + return ret;
> +}
> +
> static uint64_t bank_addr(int bank, int type)
> {
> uint64_t addr;
> @@ -330,8 +362,15 @@ static int inject(xc_interface *xc_handle, struct mce_info *mce,
> uint32_t cpu_nr, uint32_t domain, uint64_t gaddr)
> {
> int ret = 0;
> + uint8_t mcg_status = mce->mcg_stat;
>
> - ret = inject_mcg_status(xc_handle, cpu_nr, mce->mcg_stat, domain);
> + if ( lmce )
> + {
> + if ( mce->cmci )
> + err(xc_handle, "No support to inject CMCI as LMCE");
> + mcg_status |= MCG_STATUS_LMCE;
> + }
> + ret = inject_mcg_status(xc_handle, cpu_nr, mcg_status, domain);
> if ( ret )
> err(xc_handle, "Failed to inject MCG_STATUS MSR");
>
> @@ -354,6 +393,8 @@ static int inject(xc_interface *xc_handle, struct mce_info *mce,
> err(xc_handle, "Failed to inject MSR");
> if ( mce->cmci )
> ret = inject_cmci(xc_handle, cpu_nr);
> + else if ( lmce )
> + ret = inject_lmce(xc_handle, cpu_nr);
> else
> ret = inject_mce(xc_handle, cpu_nr);
> if ( ret )
> @@ -393,6 +434,7 @@ static struct option opts[] = {
> {"dump", 0, 0, 'D'},
> {"help", 0, 0, 'h'},
> {"page", 0, 0, 'p'},
> + {"lmce", 0, 0, 'l'},
> {"", 0, 0, '\0'}
> };
>
> @@ -409,6 +451,7 @@ static void help(void)
> " -d, --domain=DOMID target domain, the default is Xen itself\n"
> " -h, --help print this page\n"
> " -p, --page=ADDR physical address to report\n"
> + " -l, --lmce inject as LMCE (Intel only)\n"
> " -t, --type=ERROR error type\n");
>
> for ( i = 0; i < MCE_TABLE_SIZE; i++ )
> @@ -438,7 +481,7 @@ int main(int argc, char *argv[])
> }
>
> while ( 1 ) {
> - c = getopt_long(argc, argv, "c:Dd:t:hp:", opts, &opt_index);
> + c = getopt_long(argc, argv, "c:Dd:t:hp:l", opts, &opt_index);
> if ( c == -1 )
> break;
> switch ( c ) {
> @@ -463,6 +506,9 @@ int main(int argc, char *argv[])
> case 't':
> type = strtol(optarg, NULL, 0);
> break;
> + case 'l':
> + lmce = 1;
> + break;
> case 'h':
> default:
> help();
> --
> 2.11.0
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-07-12 13:26 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-12 2:04 [PATCH v9 0/7] Add LMCE support Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 1/7] x86/domctl: generalize the restore of vMCE parameters Haozhong Zhang
2017-07-12 6:50 ` Jan Beulich
2017-07-12 2:04 ` [PATCH v9 2/7] x86/vmce: emulate MSR_IA32_MCG_EXT_CTL Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 3/7] x86/vmce: enable injecting LMCE to guest on Intel host Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 4/7] x86/vmce, tools/libxl: expose LMCE capability in guest MSR_IA32_MCG_CAP Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 5/7] xen/mce: add support of vLMCE injection to XEN_MC_inject_v2 Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 6/7] tools/libxc: add support of injecting MC# to specified CPUs Haozhong Zhang
2017-07-12 13:25 ` Konrad Rzeszutek Wilk
2017-07-13 6:15 ` Haozhong Zhang
2017-07-12 2:04 ` [PATCH v9 7/7] tools/xen-mceinj: add support of injecting LMCE Haozhong Zhang
2017-07-12 13:26 ` Konrad Rzeszutek Wilk [this message]
2017-07-13 2:10 ` Haozhong Zhang
2017-07-17 10:05 ` Wei Liu
2017-07-17 15:21 ` Wei Liu
2017-07-18 10:33 ` Wei Liu
2017-07-18 10:34 ` Wei Liu
2017-07-14 10:48 ` [PATCH v9 0/7] Add LMCE support Jan Beulich
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=20170712132632.GG14252@char.us.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=haozhong.zhang@intel.com \
--cc=ian.jackson@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.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 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.