WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] x86: add CMCI software injection interface

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>, "Jiang, Yunhong" <yunhong.jiang@xxxxxxxxx>
Subject: [Xen-devel] [PATCH] x86: add CMCI software injection interface
From: "Ke, Liping" <liping.ke@xxxxxxxxx>
Date: Wed, 28 Apr 2010 18:06:07 +0800
Accept-language: zh-CN, en-US
Acceptlanguage: zh-CN, en-US
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 28 Apr 2010 03:07:07 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcrmumtDK0Xxt1gMS26TkfZAaTLaOw==
Thread-topic: [PATCH] x86: add CMCI software injection interface

Hi, all

 

Currently we already have MCE software injection interface.

This small patch now add CMCI software injection interface. So that CMCI error could be triggered by software on CPUs which support CMCI.

Broadcast option is used for simulating bank sharing scenario.

 

This patch was tested together by running mcelog in DOM0 and got expected CMCI information.

 

Thanks& Regards,

Criping

 

 

diff -r 37ab34d32ecf xen/arch/x86/cpu/mcheck/mce.c

--- a/xen/arch/x86/cpu/mcheck/mce.c   Fri Apr 23 14:39:44 2010 +0800

+++ b/xen/arch/x86/cpu/mcheck/mce.c          Fri Apr 23 14:40:00 2010 +0800

@@ -1274,6 +1274,7 @@ long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u

        unsigned int target;

        struct xen_mc_msrinject *mc_msrinject;

        struct xen_mc_mceinject *mc_mceinject;

+       cpumask_t target_map;

 

        if (!IS_PRIV(v->domain) )

                 return x86_mcerr(NULL, -EPERM);

@@ -1411,6 +1412,7 @@ long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u

 

                 mc_mceinject = &op->u.mc_mceinject;

                 target = mc_mceinject->mceinj_cpunr;

+                flags = mc_mceinject->mceinj_flag;

 

                 if (target >= NR_CPUS)

                           return x86_mcerr("do_mca #MC: bad target", -EINVAL);

@@ -1419,12 +1421,22 @@ long do_mca(XEN_GUEST_HANDLE(xen_mc_t) u

                           return x86_mcerr("do_mca #MC: target offline", -EINVAL);

 

                 add_taint(TAINT_ERROR_INJECT);

-

-        if ( mce_broadcast )

-            on_each_cpu(x86_mc_mceinject, mc_mceinject, 0);

-        else

-            on_selected_cpus(cpumask_of(target), x86_mc_mceinject,

-                  mc_mceinject, 1);

+                if (flags == XEN_MC_UC) {

+                          if ( mce_broadcast )

+                                   on_each_cpu(x86_mc_mceinject, mc_mceinject, 0);

+                          else

+                                   on_selected_cpus(cpumask_of(target), x86_mc_mceinject,

+                                            mc_mceinject, 1);

+                }

+                else if (flags == XEN_MC_CE) {

+                          if (mce_broadcast)

+                                   send_IPI_mask(&cpu_online_map, CMCI_APIC_VECTOR);

+                          else {

+                                   cpus_clear(target_map);

+                                   cpu_set(target, target_map);

+                                   send_IPI_mask(&target_map, CMCI_APIC_VECTOR);

+                          }

+                }

                 break;

 

        default:

diff -r 37ab34d32ecf xen/include/public/arch-x86/xen-mca.h

--- a/xen/include/public/arch-x86/xen-mca.h Fri Apr 23 14:39:44 2010 +0800

+++ b/xen/include/public/arch-x86/xen-mca.h        Fri Apr 23 14:40:00 2010 +0800

@@ -400,8 +400,11 @@ struct xen_mc_msrinject {

 #define MC_MSRINJ_F_INTERPOSE   0x1

 

 #define XEN_MC_mceinject    5

+#define XEN_MC_UC           0

+#define XEN_MC_CE           1

 struct xen_mc_mceinject {

-        unsigned int mceinj_cpunr;      /* target processor id */

+       uint32_t mceinj_cpunr;      /* target processor id */

+       uint32_t mceinj_flag;       /* UC error or CE error flag */

 };

 

 struct xen_mc {

Attachment: cmci_inject.patch
Description: cmci_inject.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] x86: add CMCI software injection interface, Ke, Liping <=