xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).