All of lore.kernel.org
 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 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.