[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] tools/tests: Drop obsolete mce-test infrastructure



commit 79ca512a1fa68e0170a85cb71b8a8e8f4a34fb11
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Jun 15 14:19:15 2021 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Jul 9 16:38:27 2021 +0100

    tools/tests: Drop obsolete mce-test infrastructure
    
    mce-test has a test suite, but it depends on xend, needs to run in-tree, and
    requires manual setup of at least one guest, and manual parameters to pass
    into cases.  Drop the test infrasturcture.
    
    Move the one useful remaining item, xen-mceinj, into misc/, fixing some 
minor
    style issues as it goes.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 .gitignore                                         |   1 -
 tools/misc/.gitignore                              |   1 +
 tools/misc/Makefile                                |   4 +
 tools/misc/xen-mceinj.c                            | 551 +++++++++++++++++++++
 tools/tests/Makefile                               |   1 -
 tools/tests/mce-test/Makefile                      |  12 -
 tools/tests/mce-test/README                        |  75 ---
 tools/tests/mce-test/cases/srao_llc/dom0/cases.sh  |  73 ---
 tools/tests/mce-test/cases/srao_llc/guest/cases.sh |  94 ----
 tools/tests/mce-test/cases/srao_llc/xen/cases.sh   |  69 ---
 tools/tests/mce-test/cases/srao_mem/dom0/cases.sh  |  73 ---
 tools/tests/mce-test/cases/srao_mem/guest/cases.sh |  94 ----
 tools/tests/mce-test/cases/srao_mem/xen/cases.sh   |  69 ---
 tools/tests/mce-test/cases/ucna_llc/dom0/cases.sh  |  72 ---
 tools/tests/mce-test/cases/ucna_llc/guest/cases.sh |  92 ----
 tools/tests/mce-test/cases/ucna_llc/xen/cases.sh   |  68 ---
 tools/tests/mce-test/config/setup.conf             |  24 -
 tools/tests/mce-test/lib/xen-mceinj-tool.sh        | 260 ----------
 tools/tests/mce-test/tools/Makefile                |  24 -
 tools/tests/mce-test/tools/README                  |  24 -
 tools/tests/mce-test/tools/xen-mceinj.c            | 545 --------------------
 21 files changed, 556 insertions(+), 1670 deletions(-)

diff --git a/.gitignore b/.gitignore
index 38a085e398..d4b90303b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -276,7 +276,6 @@ tools/tests/x86_emulator/test_x86_emulator
 tools/tests/x86_emulator/x86_emulate
 tools/tests/x86_emulator/xop*.[ch]
 tools/tests/xenstore/xs-test
-tools/tests/mce-test/tools/xen-mceinj
 tools/tests/vpci/list.h
 tools/tests/vpci/vpci.[hc]
 tools/tests/vpci/test_vpci
diff --git a/tools/misc/.gitignore b/tools/misc/.gitignore
index ce6f937d0c..73ce95e6d7 100644
--- a/tools/misc/.gitignore
+++ b/tools/misc/.gitignore
@@ -1,4 +1,5 @@
 xen-access
+xen-mceinj
 xen-memshare
 xen-ucode
 xen-vmtrace
diff --git a/tools/misc/Makefile b/tools/misc/Makefile
index c32c42d546..8b9558b93f 100644
--- a/tools/misc/Makefile
+++ b/tools/misc/Makefile
@@ -22,6 +22,7 @@ INSTALL_SBIN-$(CONFIG_MIGRATE) += xen-hptool
 INSTALL_SBIN-$(CONFIG_X86)     += xen-hvmcrash
 INSTALL_SBIN-$(CONFIG_X86)     += xen-hvmctx
 INSTALL_SBIN-$(CONFIG_X86)     += xen-lowmemd
+INSTALL_SBIN-$(CONFIG_X86)     += xen-mceinj
 INSTALL_SBIN-$(CONFIG_X86)     += xen-memshare
 INSTALL_SBIN-$(CONFIG_X86)     += xen-mfndump
 INSTALL_SBIN-$(CONFIG_X86)     += xen-ucode
@@ -97,6 +98,9 @@ xen-memshare: xen-memshare.o
 xen-vmtrace: xen-vmtrace.o
        $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) 
$(LDLIBS_libxenforeignmemory) $(APPEND_LDFLAGS)
 
+xen-mceinj: xen-mceinj.o
+       $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) 
$(LDLIBS_libxenstore) $(APPEND_LDFLAGS)
+
 xenperf: xenperf.o
        $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS)
 
diff --git a/tools/misc/xen-mceinj.c b/tools/misc/xen-mceinj.c
new file mode 100644
index 0000000000..df55eefbac
--- /dev/null
+++ b/tools/misc/xen-mceinj.c
@@ -0,0 +1,551 @@
+/*
+ * xen-mceinj.c: utilities to inject fake MCE for x86.
+ * Copyright (c) 2010, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Yunhong Jiang <yunhong.jiang@xxxxxxxxx>
+ *          Haicheng Li <haicheng.li@xxxxxxxxx>
+ *          Xudong Hao <xudong.hao@xxxxxxxxx>
+ */
+
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <getopt.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+
+#define XC_WANT_COMPAT_MAP_FOREIGN_API
+#include <xenctrl.h>
+#include <xenguest.h>
+#include <inttypes.h>
+#include <sys/time.h>
+#include <xen/arch-x86/xen-mca.h>
+#include <xenstore.h>
+
+#define MCi_type_CTL        0x0
+#define MCi_type_STATUS     0x1
+#define MCi_type_ADDR       0x2
+#define MCi_type_MISC       0x3
+#define MCi_type_CTL2       0x4
+
+#define INVALID_MSR         ~0UL
+
+/* Intel MSRs */
+#define MSR_IA32_MCG_CAP         0x00000179
+#define MSR_IA32_MCG_STATUS      0x0000017a
+#define MSR_IA32_MCG_CTL         0x0000017b
+#define MSR_IA32_MC0_CTL         0x00000400
+#define MSR_IA32_MC0_STATUS      0x00000401
+#define MSR_IA32_MC0_ADDR        0x00000402
+#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;
+    unsigned int bank;
+    uint64_t mci_stat;
+    uint64_t mci_misc;
+    bool cmci;
+};
+
+static struct mce_info mce_table[] = {
+    /* LLC (Last Level Cache) EWB (Explicit Write Back) SRAO MCE */
+    {
+        .description = "MCE_SRAO_MEM",
+        .mcg_stat = 0x5,
+        .bank = 7,
+        .mci_stat = 0xBD2000008000017Aull,
+        .mci_misc = 0x86ull,
+    },
+    /* Memory Patrol Scrub SRAO MCE */
+    {
+        .description = "MCE_SRAO_LLC",
+        .mcg_stat = 0x5,
+        .bank = 8,
+        .mci_stat = 0xBD000000004000CFull,
+        .mci_misc = 0x86ull,
+    },
+    /* LLC EWB UCNA Error */
+    {
+        .description = "CMCI_UCNA_LLC",
+        .mcg_stat = 0x0,
+        .bank = 9,
+        .mci_stat = 0xBC20000080000136ull,
+        .mci_misc = 0x86ull,
+        .cmci = true,
+    },
+    /* AMD L1 instruction cache data or tag parity. */
+    {
+        .description = "AMD L1 icache parity",
+        .mcg_stat = 0x5,
+        .bank = 1,
+        .mci_stat = 0x9400000000000151ull,
+        .mci_misc = 0x86ull,
+    },
+    /* LLC (Last Level Cache) EWB (Explicit Write Back) SRAO MCE */
+    {
+        .description = "MCE_SRAO_MEM (Fatal)",
+        .mcg_stat = 0x5,
+        .bank = 7,
+        .mci_stat = 0xBF2000008000017Aull,
+        .mci_misc = 0x86ull,
+    },
+};
+#define MCE_TABLE_SIZE (sizeof(mce_table)/sizeof(mce_table[0]))
+
+#define LOGFILE stdout
+
+int dump;
+int lmce;
+struct xen_mc_msrinject msr_inj;
+
+static void Lprintf(const char *fmt, ...)
+{
+    char *buf;
+    va_list args;
+
+    va_start(args, fmt);
+    if (vasprintf(&buf, fmt, args) < 0)
+        abort();
+    fprintf(LOGFILE, "%s\n", buf);
+    va_end(args);
+    free(buf);
+}
+
+static void err(xc_interface *xc_handle, const char *fmt, ...)
+{
+    char *buf;
+    va_list args;
+
+    va_start(args, fmt);
+    if ( vasprintf(&buf, fmt, args) < 0 )
+        abort();
+    perror(buf);
+    va_end(args);
+    free(buf);
+
+    if ( xc_handle )
+        xc_interface_close(xc_handle);
+    exit(EXIT_FAILURE);
+}
+
+static void init_msr_inj(void)
+{
+    memset(&msr_inj, 0, sizeof(msr_inj));
+}
+
+static int flush_msr_inj(xc_interface *xc_handle)
+{
+    struct xen_mc mc;
+
+    mc.cmd = XEN_MC_msrinject;
+    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
+    mc.u.mc_msrinject = msr_inj;
+
+    return xc_mca_op(xc_handle, &mc);
+}
+
+static unsigned int mca_cpuinfo(xc_interface *xc_handle)
+{
+    struct xen_mc mc;
+
+    memset(&mc, 0, sizeof(struct xen_mc));
+
+    mc.cmd = XEN_MC_physcpuinfo;
+    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
+
+    if ( !xc_mca_op(xc_handle, &mc) )
+        return mc.u.mc_physcpuinfo.ncpus;
+    else
+        return 0;
+}
+
+static int inject_cmci(xc_interface *xc_handle, unsigned int cpu_nr)
+{
+    struct xen_mc mc;
+    unsigned int nr_cpus;
+
+    memset(&mc, 0, sizeof(struct xen_mc));
+
+    nr_cpus = mca_cpuinfo(xc_handle);
+    if ( !nr_cpus )
+        err(xc_handle, "Failed to get mca_cpuinfo");
+    if ( cpu_nr >= nr_cpus )
+        err(xc_handle, "-c %u is larger than %u", cpu_nr, nr_cpus - 1);
+
+    mc.cmd = XEN_MC_inject_v2;
+    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
+
+    mc.u.mc_inject_v2.flags |= XEN_MC_INJECT_CPU_BROADCAST;
+    mc.u.mc_inject_v2.flags |= XEN_MC_INJECT_TYPE_CMCI;
+    mc.u.mc_inject_v2.cpumap.nr_bits = nr_cpus;
+
+    return xc_mca_op(xc_handle, &mc);
+}
+
+static int inject_mce(xc_interface *xc_handle, int cpu_nr)
+{
+    struct xen_mc mc;
+
+    memset(&mc, 0, sizeof(struct xen_mc));
+
+    mc.cmd = XEN_MC_mceinject;
+    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
+    mc.u.mc_mceinject.mceinj_cpunr = 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;
+    cpumap = malloc(cpumap_size);
+    if ( !cpumap )
+        err(xc_handle, "Failed to allocate cpumap\n");
+    memset(cpumap, 0, cpumap_size);
+    line = cpu / 8;
+    shift = cpu % 8;
+    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;
+
+    switch ( type )
+    {
+    case MCi_type_CTL:
+    case MCi_type_STATUS:
+    case MCi_type_ADDR:
+    case MCi_type_MISC:
+        addr = MSR_IA32_MC0_CTL + (bank * 4) + type;
+        break;
+    case MCi_type_CTL2:
+        addr = MSR_IA32_MC0_CTL2 + bank;
+        break;
+    default:
+        addr = INVALID_MSR;
+        break;
+    }
+
+    return addr;
+}
+
+static int add_msr_intpose(xc_interface *xc_handle,
+                           uint32_t cpu_nr,
+                           uint32_t flags,
+                           uint64_t msr,
+                           uint64_t val,
+                           domid_t domid)
+{
+    uint32_t count;
+
+    if ( (msr_inj.mcinj_count &&
+          (cpu_nr != msr_inj.mcinj_cpunr || flags != msr_inj.mcinj_flags ||
+           domid != msr_inj.mcinj_domid)) ||
+         msr_inj.mcinj_count == MC_MSRINJ_MAXMSRS )
+    {
+        flush_msr_inj(xc_handle);
+        init_msr_inj();
+    }
+    count = msr_inj.mcinj_count;
+
+    if ( !count )
+    {
+        msr_inj.mcinj_cpunr = cpu_nr;
+        msr_inj.mcinj_flags = flags;
+        msr_inj.mcinj_domid = domid;
+    }
+    msr_inj.mcinj_msr[count].reg = msr;
+    msr_inj.mcinj_msr[count].value = val;
+    msr_inj.mcinj_count++;
+
+    return 0;
+}
+
+static int add_msr_bank_intpose(xc_interface *xc_handle,
+                                uint32_t cpu_nr,
+                                uint32_t flags,
+                                uint32_t type,
+                                uint32_t bank,
+                                uint64_t val,
+                                domid_t domid)
+{
+    uint64_t msr;
+
+    msr = bank_addr(bank, type);
+    if ( msr == INVALID_MSR )
+        return -1;
+    return add_msr_intpose(xc_handle, cpu_nr, flags, msr, val, domid);
+}
+
+static int inject_mcg_status(xc_interface *xc_handle,
+                             uint32_t cpu_nr,
+                             uint64_t val,
+                             domid_t domid)
+{
+    return add_msr_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
+                           MSR_IA32_MCG_STATUS, val, domid);
+}
+
+static int inject_mci_status(xc_interface *xc_handle,
+                             uint32_t cpu_nr,
+                             uint64_t bank,
+                             uint64_t val,
+                             domid_t domid)
+{
+    return add_msr_bank_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
+                                MCi_type_STATUS, bank, val, domid);
+}
+
+static int inject_mci_misc(xc_interface *xc_handle,
+                           uint32_t cpu_nr,
+                           uint64_t bank,
+                           uint64_t val,
+                           domid_t domid)
+{
+    return add_msr_bank_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
+                                MCi_type_MISC, bank, val, domid);
+}
+
+static int inject_mci_addr(xc_interface *xc_handle,
+                           uint32_t cpu_nr,
+                           uint64_t bank,
+                           uint64_t val,
+                           domid_t domid)
+{
+    return add_msr_bank_intpose(xc_handle, cpu_nr,
+                                MC_MSRINJ_F_INTERPOSE |
+                                ((domid >= DOMID_FIRST_RESERVED &&
+                                  domid != DOMID_SELF) ?
+                                 0 : MC_MSRINJ_F_GPADDR),
+                                MCi_type_ADDR, bank, val, domid);
+}
+
+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;
+
+    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");
+
+    ret = inject_mci_status(xc_handle, cpu_nr,
+                            mce->bank, mce->mci_stat, domain);
+    if ( ret )
+        err(xc_handle, "Failed to inject MCi_STATUS MSR");
+
+    ret = inject_mci_misc(xc_handle, cpu_nr,
+                          mce->bank, mce->mci_misc, domain);
+    if ( ret )
+        err(xc_handle, "Failed to inject MCi_MISC MSR");
+
+    ret = inject_mci_addr(xc_handle, cpu_nr, mce->bank, gaddr, domain);
+    if ( ret )
+        err(xc_handle, "Failed to inject MCi_ADDR MSR");
+
+    ret = flush_msr_inj(xc_handle);
+    if ( ret )
+        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 )
+        err(xc_handle, "Failed to inject MCE error");
+
+    return 0;
+}
+
+static long xs_get_dom_mem(int domid)
+{
+    char path[128];
+    char *memstr;
+    uint64_t mem;
+    unsigned int plen;
+    struct xs_handle *xs;
+
+    xs = xs_open(0);
+    if (!xs)
+        return -1;
+
+    sprintf(path, "/local/domain/%d/memory/target", domid);
+    memstr = xs_read(xs, XBT_NULL, path, &plen);
+    xs_close(xs);
+
+    if (!memstr || !plen)
+        return -1;
+
+    mem = atoll(memstr) * 1024;
+    free(memstr);
+
+    return mem;
+}
+
+static struct option opts[] = {
+    {"cpu", 0, 0, 'c'},
+    {"domain", 0, 0, 'd'},
+    {"dump", 0, 0, 'D'},
+    {"help", 0, 0, 'h'},
+    {"page", 0, 0, 'p'},
+    {"lmce", 0, 0, 'l'},
+    {"", 0, 0, '\0'}
+};
+
+static void help(void)
+{
+    unsigned int i;
+
+    printf("Usage: xen-mceinj [OPTION]...\n"
+           "\n"
+           "Mandatory arguments to long options are mandatory"
+           "for short options too.\n"
+           "  -D, --dump           dump addr info without error injection\n"
+           "  -c, --cpu=CPU        target CPU\n"
+           "  -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++ )
+        printf("                       %2d : %s\n",
+               i, mce_table[i].description);
+}
+
+int main(int argc, char *argv[])
+{
+    int type = 0;
+    int c, opt_index;
+    uint32_t domid;
+    xc_interface *xc_handle;
+    unsigned int cpu_nr;
+    uint64_t gaddr, max_gpa;
+
+    /* Default Value */
+    domid = DOMID_XEN;
+    gaddr = 0x180020;
+    cpu_nr = 0;
+
+    init_msr_inj();
+    xc_handle = xc_interface_open(NULL, NULL, 0);
+    if ( !xc_handle )
+    {
+        Lprintf("Failed to get xc interface");
+        exit(EXIT_FAILURE);
+    }
+
+    while ( 1 )
+    {
+        c = getopt_long(argc, argv, "c:Dd:t:hp:l", opts, &opt_index);
+        if ( c == -1 )
+            break;
+        switch ( c )
+        {
+        case 'D':
+            dump=1;
+            break;
+        case 'c':
+            cpu_nr = strtoul(optarg, &optarg, 10);
+            if ( strlen(optarg) != 0 )
+                err(xc_handle, "Please input a digit parameter for CPU");
+            break;
+        case 'd':
+            domid = strtol(optarg, &optarg, 10);
+            if ( strlen(optarg) != 0 )
+                err(xc_handle, "Please input a digit parameter for domain");
+            break;
+        case 'p':
+            gaddr = strtol(optarg, &optarg, 0);
+            if ( strlen(optarg) != 0 )
+                err(xc_handle, "Please input correct page address");
+            break;
+        case 't':
+            type = strtol(optarg, NULL, 0);
+            break;
+        case 'l':
+            lmce = 1;
+            break;
+        case 'h':
+        default:
+            help();
+            return 0;
+        }
+    }
+
+    if ( domid != DOMID_XEN )
+    {
+        max_gpa = xs_get_dom_mem(domid);
+        Lprintf("get domain %d max gpa is: 0x%lx", domid, max_gpa);
+        if ( gaddr >= max_gpa )
+            err(xc_handle, "Fail: gaddr exceeds max_gpa 0x%lx", max_gpa);
+    }
+    Lprintf("get gaddr of error inject is: 0x%lx", gaddr);
+
+    if ( dump )
+    {
+        if ( domid == DOMID_XEN )
+            Lprintf("Xen: gaddr=0x%lx", gaddr);
+        else
+            Lprintf("Dom%d: gaddr=0x%lx", domid, gaddr);
+        goto out;
+    }
+
+    if ( type < 0 || type >= MCE_TABLE_SIZE )
+    {
+        err(xc_handle, "Unsupported error type");
+        goto out;
+    }
+
+    inject(xc_handle, &mce_table[type], cpu_nr, domid, gaddr);
+
+ out:
+    xc_interface_close(xc_handle);
+    return 0;
+}
diff --git a/tools/tests/Makefile b/tools/tests/Makefile
index 25531a984a..33e32730c4 100644
--- a/tools/tests/Makefile
+++ b/tools/tests/Makefile
@@ -4,7 +4,6 @@ include $(XEN_ROOT)/tools/Rules.mk
 SUBDIRS-y :=
 SUBDIRS-y += resource
 SUBDIRS-$(CONFIG_X86) += cpu-policy
-SUBDIRS-$(CONFIG_X86) += mce-test
 SUBDIRS-$(CONFIG_X86) += tsx
 ifneq ($(clang),y)
 SUBDIRS-$(CONFIG_X86) += x86_emulator
diff --git a/tools/tests/mce-test/Makefile b/tools/tests/mce-test/Makefile
deleted file mode 100644
index 1395df38ac..0000000000
--- a/tools/tests/mce-test/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-.PHONY: all clean distclean
-
-all: 
-       $(MAKE) -C tools
-
-clean:
-       $(MAKE) -C tools clean
-
-distclean:
-       $(MAKE) -C tools distclean
-
-install uninstall:
diff --git a/tools/tests/mce-test/README b/tools/tests/mce-test/README
deleted file mode 100644
index 65e6d1b045..0000000000
--- a/tools/tests/mce-test/README
+++ /dev/null
@@ -1,75 +0,0 @@
-Xen MCE test suite
----------------
-
-The Xen MCE test suite is a collection of tools and test scripts for
-testing the Xen MCE processing features. The goal is to cover
-most Xen MCE processing code paths and features with automation tests.
-
-
-In the Package
---------------
-
-Here is a short description of what is included in the package
-
-README
-       This is document
-
-Makefile
-       For compile
-
-cases/*
-       Contains all test cases, which may be organized in sub-directories, 
-       the interface of test case is a shell script under cases/, such as:
-          -- cases/srao_mem/dom0/cases.sh
-
-config/*
-       Contains test configuration files, which specifies the parameters 
-       for test cases, etc.
-
-lib/*
-       Contains some shell scripts, in which some common shell
-       functions and variable definitions are defined to be used by
-       test cases.
-
-tools/*
-       Tools used by MCE test suites, now only xen-mceinj tool.
-
-results/
-       When test is done, the test result will be placed in this
-       directory, test results of various cases may be in corresponding 
-       directory. 
-       For example, files in
-           results/srao_mem_dom0/result
-       is the result for test case cases/srao_mem/dom0/cases.sh, there will
-       be 3 result conditions: PASSED/FAILED/NORESULT.
-               results/<test_case>/testlog   #the test log during testing
-               results/<test_case>/mcelog    #mcelog output during testing
-               results/<test_case>/xenlog    #Xen log during testing
-               results/<test_case>/gklog     #VM guest kernel log during 
testing
-               results/<test_case>/guest_config   #config file used to create 
guest
-
-
-Test Instruction
-----------------
-
-1.     make sure you have a dom0 with mce support
-       CONFIG_X86_MCE=y
-       CONFIG_X86_MCE_INTEL=y
-       CONFIG_X86_MCE_AMD=y
-       CONFIG_X86_MCE_THRESHOLD=y
-       CONFIG_X86_MCE_INJECT=y
-
-2.     run system at xen and start xend. A installed guest image is
-       necessary when do guest MCE error injection.
-3.     compile tools that used to test. in mce-test, $make.
-       Note: make sure compile xen/tools before do this step
-4.     run test cases that you want.
-       e.g. $sh cases/srao_mem/dom0/cases.sh -d 0 -p 0x0200 -c 2 -t 1
-5.     get test result in results directory
-
-
-Notes
-----------------
-All test cases fake a error and inject this error in 0x180020, For Xen
-test cases(e.g. cases/srao_mem/xen/cases.sh), error happen on every page 
-may cause a Xen panic. 
diff --git a/tools/tests/mce-test/cases/srao_llc/dom0/cases.sh 
b/tools/tests/mce-test/cases/srao_llc/dom0/cases.sh
deleted file mode 100644
index c540f64998..0000000000
--- a/tools/tests/mce-test/cases/srao_llc/dom0/cases.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_llc_dom0
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-d domainID\t: 0"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:d:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    d) domid=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-[ -z $domid ] && domid=0
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_LLC -d $domid -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_LLC || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/srao_llc/guest/cases.sh 
b/tools/tests/mce-test/cases/srao_llc/guest/cases.sh
deleted file mode 100644
index 47a7ee4ab9..0000000000
--- a/tools/tests/mce-test/cases/srao_llc/guest/cases.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_llc_guest
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the must have options==============="
-    echo -e "\t-i image\t: guest image"
-    echo -e "\t-m memory\t: set guest virtual memory"
-    echo "========                                              ========"
-    echo "================Below are the optional options================"
-    echo -e "\t-u vcpus\t: set guest virtual cpus number"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-[ $# -lt 1 ] && usage
-
-while getopts ":i:u:m:c:p:hl:" option
-do
-    case "$option" in
-    i) image=$OPTARG; offset=`kpartx -l $image | awk '{print $NF*512}'`;;
-    u) vcpus=$OPTARG;;
-    m) memory=$OPTARG;;
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    l) early_kill="0";;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-
-start_guest()
-{
-    create_hvm_guest $image -u $vcpus -m $memory
-    if [ $? -ne 0 ]; then
-        echo "  Create guest fail!"
-        return 1
-    fi
-    return 0
-}
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_LLC -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    start_guest || ret_val=1
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    guest_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_LLC || ret_val=1
-    des_guest
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/srao_llc/xen/cases.sh 
b/tools/tests/mce-test/cases/srao_llc/xen/cases.sh
deleted file mode 100644
index 1d8e02ff65..0000000000
--- a/tools/tests/mce-test/cases/srao_llc/xen/cases.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_llc_xen
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_LLC -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_LLC || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/srao_mem/dom0/cases.sh 
b/tools/tests/mce-test/cases/srao_mem/dom0/cases.sh
deleted file mode 100644
index 22d4a00960..0000000000
--- a/tools/tests/mce-test/cases/srao_mem/dom0/cases.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_mem_dom0
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-d domainID\t: 0"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:d:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    d) domid=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-[ -z $domid ] && domid=0
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_MEM -d $domid -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_MEM || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/srao_mem/guest/cases.sh 
b/tools/tests/mce-test/cases/srao_mem/guest/cases.sh
deleted file mode 100644
index 7ab4523096..0000000000
--- a/tools/tests/mce-test/cases/srao_mem/guest/cases.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_mem_guest
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the must have options==============="
-    echo -e "\t-i image\t: guest image"
-    echo -e "\t-m memory\t: set guest virtual memory"
-    echo "========                                              ========"
-    echo "================Below are the optional options================"
-    echo -e "\t-u vcpus\t: set guest virtual cpus number"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-[ $# -lt 1 ] && usage
-
-while getopts ":i:u:m:c:p:hl:" option
-do
-    case "$option" in
-    i) image=$OPTARG; offset=`kpartx -l $image | awk '{print $NF*512}'`;;
-    u) vcpus=$OPTARG;;
-    m) memory=$OPTARG;;
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    l) early_kill="0";;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-
-start_guest()
-{
-    create_hvm_guest $image -u $vcpus -m $memory
-    if [ $? -ne 0 ]; then
-        echo "  Create guest fail!"
-        return 1
-    fi
-    return 0
-}
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_MEM -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    start_guest || ret_val=1
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    guest_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_MEM || ret_val=1
-    des_guest
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/srao_mem/xen/cases.sh 
b/tools/tests/mce-test/cases/srao_mem/xen/cases.sh
deleted file mode 100644
index 7ae49a82ac..0000000000
--- a/tools/tests/mce-test/cases/srao_mem/xen/cases.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=srao_mem_xen
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-inject()
-{
-    mce_inject_trigger $MCE_SRAO_MEM -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    xen_verify || ret_val=1
-    mcelog_verify $MCE_SRAO_MEM || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/ucna_llc/dom0/cases.sh 
b/tools/tests/mce-test/cases/ucna_llc/dom0/cases.sh
deleted file mode 100644
index 808f007708..0000000000
--- a/tools/tests/mce-test/cases/ucna_llc/dom0/cases.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=ucna_llc_dom0
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-d domainID\t: 0"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:d:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    d) domid=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-[ -z $domid ] && domid=0
-
-inject()
-{
-    mce_inject_trigger $CMCI_UCNA_LLC -d $domid -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    mcelog_verify $CMCI_UCNA_LLC || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/ucna_llc/guest/cases.sh 
b/tools/tests/mce-test/cases/ucna_llc/guest/cases.sh
deleted file mode 100644
index 0ca4e2c961..0000000000
--- a/tools/tests/mce-test/cases/ucna_llc/guest/cases.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=ucna_llc_guest
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the must have options==============="
-    echo -e "\t-i image\t: guest image"
-    echo -e "\t-m memory\t: set guest virtual memory"
-    echo "========                                              ========"
-    echo "================Below are the optional options================"
-    echo -e "\t-u vcpus\t: set guest virtual cpus number"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-[ $# -lt 1 ] && usage
-
-while getopts ":i:u:m:c:p:hl:" option
-do
-    case "$option" in
-    i) image=$OPTARG; offset=`kpartx -l $image | awk '{print $NF*512}'`;;
-    u) vcpus=$OPTARG;;
-    m) memory=$OPTARG;;
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    l) early_kill="0";;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-
-start_guest()
-{
-    create_hvm_guest $image -u $vcpus -m $memory
-    if [ $? -ne 0 ]; then
-        echo "  Create guest fail!"
-        return 1
-    fi
-    return 0
-}
-
-inject()
-{
-    mce_inject_trigger $CMCI_UCNA_LLC -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    start_guest || ret_val=1
-    inject || ret_val=1
-    mcelog_verify $CMCI_UCNA_LLC || ret_val=1
-    des_guest
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/cases/ucna_llc/xen/cases.sh 
b/tools/tests/mce-test/cases/ucna_llc/xen/cases.sh
deleted file mode 100644
index c73a2f6c16..0000000000
--- a/tools/tests/mce-test/cases/ucna_llc/xen/cases.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-sd=$(dirname $0)
-export ROOT=`(cd $sd/../../../; pwd)`
-export this_case=ucna_llc_xen
-
-. $ROOT/lib/xen-mceinj-tool.sh
-
-usage()
-{
-    echo "Usage: ./cases.sh [-options] [arguments]"
-    echo "================Below are the optional options================"
-    echo -e "\t-c injcpu\t: which cpu to inject error"
-    echo -e "\t-p pageaddr\t: Guest Physical Address to inject error"
-    echo -e "\t\t\tBy default, the GPA is 0x180020"
-    echo -e "\t-h help"
-    exit 0
-}
-
-while getopts ":c:p:h" option
-do
-    case "$option" in
-    c) injcpu=$OPTARG;;
-    p) pageaddr=$OPTARG;;
-    h) usage;;
-    *) echo "invalid option!"; usage;;
-    esac
-done
-
-inject()
-{
-    mce_inject_trigger $CMCI_UCNA_LLC -u $injcpu -p $pageaddr 
-    if [ $? -eq 0 ]; then
-        show "  Passed: Successfully to fake and inject a MCE error"
-    else
-        show "  Failed: Fake error and inject fail !!"
-        return 1
-    fi
-    return 0
-}
-
-do_main()
-{
-    ret_val=0
-    clean_env
-    inject || ret_val=1
-    mcelog_verify $CMCI_UCNA_LLC || ret_val=1
-    gen_result $ret_val
-}
-
-do_main "$@"
diff --git a/tools/tests/mce-test/config/setup.conf 
b/tools/tests/mce-test/config/setup.conf
deleted file mode 100644
index 05f754dfd6..0000000000
--- a/tools/tests/mce-test/config/setup.conf
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-#
-# Software injection based test cases: test cases are triggered via
-# mce-inject tool.
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-export MCE_SRAO_MEM=0
-export MCE_SRAO_LLC=1
-export CMCI_UCNA_LLC=2
diff --git a/tools/tests/mce-test/lib/xen-mceinj-tool.sh 
b/tools/tests/mce-test/lib/xen-mceinj-tool.sh
deleted file mode 100644
index c0a3b293c5..0000000000
--- a/tools/tests/mce-test/lib/xen-mceinj-tool.sh
+++ /dev/null
@@ -1,260 +0,0 @@
-#!/bin/bash
-#
-# Software injection based test cases: test cases are triggered via
-# mce-inject tool.
-# Copyright (c) 2010, Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-# 
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Xudong Hao <xudong.hao@xxxxxxxxx>
-#
-
-. $ROOT/config/setup.conf
-
-#Guest Image Preparation
-hvm_image_prepare()
-{
-    local image=$1
-    local tmpdir=`mktemp -d`
-    local tmpfile=`mktemp`
-    local offset=`kpartx -l $image | awk '{print $NF*512}'`
-    mount -oloop,offset=$offset $image $tmpdir && echo "mount image to $tmpdir"
-    local g_grub=$tmpdir/boot/grub/grub.conf
-    if [ $? -ne 0 ]; then
-        show "  Mount image failed!"
-        return 1
-    fi
-
-    if ! grep FLAG_CONSOLE $g_grub; then
-        sed -e '/kernel/s/$/ console=ttyS0,115200,8n1 console=tty0/g' \
-            $g_grub > $tmpfile
-        mv -f $tmpfile $g_grub
-        rm -f $tmpfile
-        echo "
-#### FLAG_CONSOLE #### " >> $g_grub
-    fi
-    umount $tmpdir
-    rm -fr $tmpdir
-
-    return 0
-}
-
-create_hvm_guest()
-{
-    local image=$1
-    local originconfig="/etc/xen/xmexample.hvm"
-    local TF=`mktemp`
-    local case_dir=$ROOT/results/$this_case
-    local config=$case_dir/guest_config
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $logfile ] || touch $logfile
-    local File=`echo $image|sed "s/\//\\\\\\\\\\//g"`
-    local g_name="`basename $image`_`date +%H%M%S`"
-
-    hvm_image_prepare $image
-
-    while getopts ":u:m:" Option
-    do
-        case $Option in
-            u ) vcpus=$OPTARG;;
-            m ) memory=$OPTARG;;
-            e ) bridge_name=$OPTARG;;
-            * ) ;;
-        esac
-    done
-
-    cp $originconfig $config -f
-
-    if [ -z $image ]; then
-        show "Image file $image does not exist, Please input one valid file"
-        return 1
-    fi
-
-    sed -e "/^disk/s/file:.*,\(hda\)/file:${File},\1/" $config \
-          | sed -e "/^disk/s/phy:.*,\(hda\)/file:${File},\1/" >$TF
-    mv -f $TF $config
-
-    [ -z $memory ] || sed -i "/^memory/s/^.*$/memory = $memory/" $config
-    [ -z $vcpus ] || sed -i "1,/^#vcpus/s/^#vcpus.*$/vcpus=$vcpus/;1d" $config
-    sed -i "/^vif/s/vif/#vif/" $config
-    sed -i "/^name/s/^.*$/name = \"$g_name\"/" $config
-
-    string1=$(ls /dev/pts | sort)
-    xm cr $config
-    [ $? -eq 0 ] && domid=`xm list $g_name | tail -n1 | awk '{print $2}'`
-    if [ -z $domid ]; then
-        show "  Guest can not boot up"
-        return 1
-    fi
-    
-    sleep 10
-
-    string2=$(ls /dev/pts | sort)
-
-    get_guest_klog
-    sleep 40
-
-    return 0
-}
-
-get_guest_klog()
-{
-    local case_dir=$ROOT/results/$this_case
-    gklog=$case_dir/gklog
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $gklog ] || touch $gklog
-    for fo in $string2; do
-        echo $string1 | grep $fo -wq
-        [ $? -eq 1 ] && num=$fo
-    done
-    cat /dev/pts/$num > $gklog &
-}
-
-mce_inject_trigger()
-{
-    local errtype=$1
-    local append=""
-    while getopts ":d:u:p:" Option
-    do
-        case $Option in
-            d ) domid=$OPTARG;;
-            u ) cpu=$OPTARG;;
-            p ) pageaddr=$OPTARG;;
-            * ) ;;
-        esac
-    done
-
-    [ -z $domid ] || append=$append" -d $domid"
-    [ -z $cpu ] || append=$append" -c $cpu"
-    [ -z $pageaddr ] || append=$append" -p $pageaddr"
-
-    [ -f $ROOT/tools/xen-mceinj ]
-    if [ $? -eq 0 ]; then
-        xm dmesg -c
-        $ROOT/tools/xen-mceinj -t $errtype $append
-        if [ $? -ne 0 ]; then
-            show "  Failed: Maybe the memory addr is out of range. \
-                      Please check whether used xen-mceinj tool correctlly"
-            return 1
-        fi
-    else
-        show "  Failed: please compile xen-mce inject tool firstly"
-        return 1
-    fi
-    return 0
-}
-
-xen_verify()
-{
-    local case_dir=$ROOT/results/$this_case
-    local xenlog=$case_dir/xenlog
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $xenlog ] || touch $xenlog
-    xm dmesg > $xenlog
-    grep "Error is successfully recovered" $xenlog > /dev/null
-    if [ $? -eq 0 ]; then
-        show "  Passed: Xen handle this MCE error successfully"
-    else
-        show "  Failed: Xen does not handle MCE error correctly !!"
-        return 1
-    fi
-    return 0
-}
-
-guest_verify()
-{
-    grep "kernel page recovery" $gklog > /dev/null
-    if [ $? -eq 0 ]; then
-        show "  Passed: Guest recive MCE error and solved correctly"
-    else
-        show "  Failed: Guest fail to solve MCE error"
-        return 1
-    fi
-    return 0
-}
-
-mcelog_verify()
-{
-    local err_type=$1
-    local ret=0
-    local case_dir=$ROOT/results/$this_case
-    local mcelog=$case_dir/mcelog
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $mcelog ] || touch $mcelog
-    mcelog > $mcelog
-    if [ -z $mcelog ]; then
-        show "  Failed: MCELOG does not catch anything"
-        return 1
-    else
-        if [ $err_type -eq 0 ]; then
-            grep "MEMORY CONTROLLER MS_CHANNELunspecified_ERR" $mcelog \
-                > /dev/null
-            ret=$?
-        elif [ $err_type -eq 1 ]; then
-            grep "Generic CACHE Level-2 Eviction Error" $mcelog > /dev/null
-            ret=$?
-        elif [ $err_type -eq 2 ]; then
-            grep "Data CACHE Level-2 Data-Read Error" $mcelog > /dev/null
-            ret=$?
-        fi
-
-        if [ $ret -eq 0 ]; then
-            show "  Passed: MCElog catch a correct error"
-        else 
-            show "  Failed: MCE log catch a incorrect error !!"
-            return 1
-        fi
-    fi
-
-    return 0
-}
-
-function des_guest()
-{
-    xm des $domid    
-}
-
-function clean_env()
-{
-    [ -d $ROOT/results ] || mkdir $ROOT/results
-    # clean logs and results of last test for this case
-    rm -fr $ROOT/results/$this_case/*
-}
-
-function show()
-{
-    local case_dir=$ROOT/results/$this_case
-    local logfile=$case_dir/testlog
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $logfile ] || touch $logfile
-    echo -e $* | tee -a $logfile > /dev/null
-}
-
-function gen_result()
-{
-    local ret=$1
-    local case_dir=$ROOT/results/$this_case
-    local result=$case_dir/result
-    [ -d $case_dir ] || mkdir $case_dir
-    [ -f $result ] || touch $result
-    
-    if [ $ret -eq 0 ]; then
-        echo "PASSED" > $result
-    elif [ $ret -eq 1 ]; then
-        echo "FAILED" > $result
-        echo "   Please check testlog for details!!! " >> $result
-    else
-        echo "NORESULT" > $result
-        echo "   Please check testlog for details!!! " >> $result
-    fi
-}
diff --git a/tools/tests/mce-test/tools/Makefile 
b/tools/tests/mce-test/tools/Makefile
deleted file mode 100644
index 0e92ac2977..0000000000
--- a/tools/tests/mce-test/tools/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-XEN_ROOT=$(CURDIR)/../../../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-CFLAGS += -Werror
-CFLAGS += $(CFLAGS_libxenctrl)
-CFLAGS += $(CFLAGS_libxenguest)
-CFLAGS += $(CFLAGS_libxenstore)
-CFLAGS += $(CFLAGS_xeninclude)
-
-.PHONY: all
-all: xen-mceinj
-
-install: xen-mceinj
-       $(INSTALL_PROG) xen-mceinj $(DESTDIR)$(sbindir)
-
-.PHONY: clean
-clean:
-       $(RM) *.o xen-mceinj
-
-.PHONY: distclean
-distclean: clean
-
-xen-mceinj: xen-mceinj.o Makefile
-       $(CC) -o $@ $< $(LDFLAGS) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) 
$(LDLIBS_libxenstore)
diff --git a/tools/tests/mce-test/tools/README 
b/tools/tests/mce-test/tools/README
deleted file mode 100644
index bd0d442bae..0000000000
--- a/tools/tests/mce-test/tools/README
+++ /dev/null
@@ -1,24 +0,0 @@
-Xen Machine Check Exception(MCE) error inject tool
-----------------------------------------------
-
-xen-mceinj is a software MCE injection tool, which is based on Xen 
-MCE injection mechanism. It allows to inject machine check errors on the
-software level into a running Xen/dom0/VM. This is intended for
-validation of the Xen machine check handler.
-
-With the help of the Makefile, it is possible to compile a binary file 
-named "xen-mceinj".
-
-Usage
------
-$make (make install) --Note: make sure compile xen/tools before do this step
-$./xen-mceinj [OPTION]...
-
-OPTION arguments can be:
-  -D, --dump           dump addr info without error injection
-  -c, --cpu=CPU_ID     target CPU, the default is CPU0
-  -d, --domain=DomID   target domain, the default is Xen itself
-  -p, --page           physical page address, the default is 0x180020
-  -t, --type=error     error type
-
-For detail help, please refer to "./xen-mceinj -h"
diff --git a/tools/tests/mce-test/tools/xen-mceinj.c 
b/tools/tests/mce-test/tools/xen-mceinj.c
deleted file mode 100644
index 1187d01e5f..0000000000
--- a/tools/tests/mce-test/tools/xen-mceinj.c
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * xen-mceinj.c: utilities to inject fake MCE for x86.
- * Copyright (c) 2010, Intel Corporation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Yunhong Jiang <yunhong.jiang@xxxxxxxxx>
- *          Haicheng Li <haicheng.li@xxxxxxxxx>
- *          Xudong Hao <xudong.hao@xxxxxxxxx>
- */
-
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-#include <errno.h>
-#include <signal.h>
-#include <stdarg.h>
-
-#define XC_WANT_COMPAT_MAP_FOREIGN_API
-#include <xenctrl.h>
-#include <xenguest.h>
-#include <inttypes.h>
-#include <sys/time.h>
-#include <xen/arch-x86/xen-mca.h>
-#include <xenstore.h>
-
-#define MCi_type_CTL        0x0
-#define MCi_type_STATUS     0x1
-#define MCi_type_ADDR       0x2
-#define MCi_type_MISC       0x3
-#define MCi_type_CTL2       0x4
-
-#define INVALID_MSR         ~0UL
-
-/* Intel MSRs */
-#define MSR_IA32_MCG_CAP         0x00000179
-#define MSR_IA32_MCG_STATUS      0x0000017a
-#define MSR_IA32_MCG_CTL         0x0000017b
-#define MSR_IA32_MC0_CTL         0x00000400
-#define MSR_IA32_MC0_STATUS      0x00000401
-#define MSR_IA32_MC0_ADDR        0x00000402
-#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;
-    unsigned int bank;
-    uint64_t mci_stat;
-    uint64_t mci_misc;
-    bool cmci;
-};
-
-static struct mce_info mce_table[] = {
-    /* LLC (Last Level Cache) EWB (Explicit Write Back) SRAO MCE */
-    {
-        .description = "MCE_SRAO_MEM",
-        .mcg_stat = 0x5,
-        .bank = 7,
-        .mci_stat = 0xBD2000008000017Aull,
-        .mci_misc = 0x86ull,
-    },
-    /* Memory Patrol Scrub SRAO MCE */
-    {
-        .description = "MCE_SRAO_LLC",
-        .mcg_stat = 0x5,
-        .bank = 8,
-        .mci_stat = 0xBD000000004000CFull,
-        .mci_misc = 0x86ull,
-    },
-    /* LLC EWB UCNA Error */
-    {
-        .description = "CMCI_UCNA_LLC",
-        .mcg_stat = 0x0,
-        .bank = 9,
-        .mci_stat = 0xBC20000080000136ull,
-        .mci_misc = 0x86ull,
-        .cmci = true,
-    },
-    /* AMD L1 instruction cache data or tag parity. */
-    {
-        .description = "AMD L1 icache parity",
-        .mcg_stat = 0x5,
-        .bank = 1,
-        .mci_stat = 0x9400000000000151ull,
-        .mci_misc = 0x86ull,
-    },
-    /* LLC (Last Level Cache) EWB (Explicit Write Back) SRAO MCE */
-    {
-        .description = "MCE_SRAO_MEM (Fatal)",
-        .mcg_stat = 0x5,
-        .bank = 7,
-        .mci_stat = 0xBF2000008000017Aull,
-        .mci_misc = 0x86ull,
-    },
-};
-#define MCE_TABLE_SIZE (sizeof(mce_table)/sizeof(mce_table[0]))
-
-#define LOGFILE stdout
-
-int dump;
-int lmce;
-struct xen_mc_msrinject msr_inj;
-
-static void Lprintf(const char *fmt, ...)
-{
-    char *buf;
-    va_list args;
-
-    va_start(args, fmt);
-    if (vasprintf(&buf, fmt, args) < 0)
-        abort();
-    fprintf(LOGFILE, "%s\n", buf);
-    va_end(args);
-    free(buf);
-}
-
-static void err(xc_interface *xc_handle, const char *fmt, ...)
-{
-    char *buf;
-    va_list args;
-
-    va_start(args, fmt);
-    if (vasprintf(&buf, fmt, args) < 0)
-        abort();
-    perror(buf);
-    va_end(args);
-    free(buf);
-
-    if ( xc_handle )
-        xc_interface_close(xc_handle);
-    exit(EXIT_FAILURE);
-}
-
-static void init_msr_inj(void)
-{
-    memset(&msr_inj, 0, sizeof(msr_inj));
-}
-
-static int flush_msr_inj(xc_interface *xc_handle)
-{
-    struct xen_mc mc;
-
-    mc.cmd = XEN_MC_msrinject;
-    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
-    mc.u.mc_msrinject = msr_inj;
-
-    return xc_mca_op(xc_handle, &mc);
-}
-
-static unsigned int mca_cpuinfo(xc_interface *xc_handle)
-{
-    struct xen_mc mc;
-
-    memset(&mc, 0, sizeof(struct xen_mc));
-
-    mc.cmd = XEN_MC_physcpuinfo;
-    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
-
-    if (!xc_mca_op(xc_handle, &mc))
-        return mc.u.mc_physcpuinfo.ncpus;
-    else
-        return 0;
-}
-
-static int inject_cmci(xc_interface *xc_handle, unsigned int cpu_nr)
-{
-    struct xen_mc mc;
-    unsigned int nr_cpus;
-
-    memset(&mc, 0, sizeof(struct xen_mc));
-
-    nr_cpus = mca_cpuinfo(xc_handle);
-    if (!nr_cpus)
-        err(xc_handle, "Failed to get mca_cpuinfo");
-    if (cpu_nr >= nr_cpus)
-        err(xc_handle, "-c %u is larger than %u", cpu_nr, nr_cpus - 1);
-
-    mc.cmd = XEN_MC_inject_v2;
-    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
-
-    mc.u.mc_inject_v2.flags |= XEN_MC_INJECT_CPU_BROADCAST;
-    mc.u.mc_inject_v2.flags |= XEN_MC_INJECT_TYPE_CMCI;
-    mc.u.mc_inject_v2.cpumap.nr_bits = nr_cpus;
-
-    return xc_mca_op(xc_handle, &mc);
-}
-
-static int inject_mce(xc_interface *xc_handle, int cpu_nr)
-{
-    struct xen_mc mc;
-
-    memset(&mc, 0, sizeof(struct xen_mc));
-
-    mc.cmd = XEN_MC_mceinject;
-    mc.interface_version = XEN_MCA_INTERFACE_VERSION;
-    mc.u.mc_mceinject.mceinj_cpunr = 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;
-    cpumap = malloc(cpumap_size);
-    if ( !cpumap )
-        err(xc_handle, "Failed to allocate cpumap\n");
-    memset(cpumap, 0, cpumap_size);
-    line = cpu / 8;
-    shift = cpu % 8;
-    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;
-
-    switch ( type )
-    {
-    case MCi_type_CTL:
-    case MCi_type_STATUS:
-    case MCi_type_ADDR:
-    case MCi_type_MISC:
-        addr = MSR_IA32_MC0_CTL + (bank * 4) + type;
-        break;
-    case MCi_type_CTL2:
-        addr = MSR_IA32_MC0_CTL2 + bank;
-        break;
-    default:
-        addr = INVALID_MSR;
-        break;
-    }
-
-    return addr;
-}
-
-static int add_msr_intpose(xc_interface *xc_handle,
-                           uint32_t cpu_nr,
-                           uint32_t flags,
-                           uint64_t msr,
-                           uint64_t val,
-                           domid_t domid)
-{
-    uint32_t count;
-
-    if ( (msr_inj.mcinj_count &&
-          (cpu_nr != msr_inj.mcinj_cpunr || flags != msr_inj.mcinj_flags ||
-           domid != msr_inj.mcinj_domid)) ||
-         msr_inj.mcinj_count == MC_MSRINJ_MAXMSRS )
-    {
-        flush_msr_inj(xc_handle);
-        init_msr_inj();
-    }
-    count= msr_inj.mcinj_count;
-
-    if ( !count )
-    {
-        msr_inj.mcinj_cpunr = cpu_nr;
-        msr_inj.mcinj_flags = flags;
-        msr_inj.mcinj_domid = domid;
-    }
-    msr_inj.mcinj_msr[count].reg = msr;
-    msr_inj.mcinj_msr[count].value = val;
-    msr_inj.mcinj_count++;
-
-    return 0;
-}
-
-static int add_msr_bank_intpose(xc_interface *xc_handle,
-                                uint32_t cpu_nr,
-                                uint32_t flags,
-                                uint32_t type,
-                                uint32_t bank,
-                                uint64_t val,
-                                domid_t domid)
-{
-    uint64_t msr;
-
-    msr = bank_addr(bank, type);
-    if ( msr == INVALID_MSR )
-        return -1;
-    return add_msr_intpose(xc_handle, cpu_nr, flags, msr, val, domid);
-}
-
-static int inject_mcg_status(xc_interface *xc_handle,
-                             uint32_t cpu_nr,
-                             uint64_t val,
-                             domid_t domid)
-{
-    return add_msr_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
-                           MSR_IA32_MCG_STATUS, val, domid);
-}
-
-static int inject_mci_status(xc_interface *xc_handle,
-                             uint32_t cpu_nr,
-                             uint64_t bank,
-                             uint64_t val,
-                             domid_t domid)
-{
-    return add_msr_bank_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
-                                MCi_type_STATUS, bank, val, domid);
-}
-
-static int inject_mci_misc(xc_interface *xc_handle,
-                           uint32_t cpu_nr,
-                           uint64_t bank,
-                           uint64_t val,
-                           domid_t domid)
-{
-    return add_msr_bank_intpose(xc_handle, cpu_nr, MC_MSRINJ_F_INTERPOSE,
-                                MCi_type_MISC, bank, val, domid);
-}
-
-static int inject_mci_addr(xc_interface *xc_handle,
-                           uint32_t cpu_nr,
-                           uint64_t bank,
-                           uint64_t val,
-                           domid_t domid)
-{
-    return add_msr_bank_intpose(xc_handle, cpu_nr,
-                                MC_MSRINJ_F_INTERPOSE |
-                                ((domid >= DOMID_FIRST_RESERVED &&
-                                  domid != DOMID_SELF) ?
-                                 0 : MC_MSRINJ_F_GPADDR),
-                                MCi_type_ADDR, bank, val, domid);
-}
-
-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;
-
-    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");
-
-    ret = inject_mci_status(xc_handle, cpu_nr,
-                            mce->bank, mce->mci_stat, domain);
-    if ( ret )
-        err(xc_handle, "Failed to inject MCi_STATUS MSR");
-
-    ret = inject_mci_misc(xc_handle, cpu_nr,
-                          mce->bank, mce->mci_misc, domain);
-    if ( ret )
-        err(xc_handle, "Failed to inject MCi_MISC MSR");
-
-    ret = inject_mci_addr(xc_handle, cpu_nr, mce->bank, gaddr, domain);
-    if ( ret )
-        err(xc_handle, "Failed to inject MCi_ADDR MSR");
-
-    ret = flush_msr_inj(xc_handle);
-    if ( ret )
-        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 )
-        err(xc_handle, "Failed to inject MCE error");
-
-    return 0;
-}
-
-static long xs_get_dom_mem(int domid)
-{
-    char path[128];
-    char *memstr;
-    uint64_t mem;
-    unsigned int plen;
-    struct xs_handle *xs;
-
-    xs = xs_open(0);
-    if (!xs)
-        return -1;
-
-    sprintf(path, "/local/domain/%d/memory/target", domid);
-    memstr = xs_read(xs, XBT_NULL, path, &plen);
-    xs_close(xs);
-
-    if (!memstr || !plen)
-        return -1;
-
-    mem = atoll(memstr)*1024;
-    free(memstr);
-
-    return mem;
-}
-
-static struct option opts[] = {
-    {"cpu", 0, 0, 'c'},
-    {"domain", 0, 0, 'd'},
-    {"dump", 0, 0, 'D'},
-    {"help", 0, 0, 'h'},
-    {"page", 0, 0, 'p'},
-    {"lmce", 0, 0, 'l'},
-    {"", 0, 0, '\0'}
-};
-
-static void help(void)
-{
-    unsigned int i;
-
-    printf("Usage: xen-mceinj [OPTION]...\n"
-           "\n"
-           "Mandatory arguments to long options are mandatory"
-           "for short options too.\n"
-           "  -D, --dump           dump addr info without error injection\n"
-           "  -c, --cpu=CPU        target CPU\n"
-           "  -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++ )
-        printf("                       %2d : %s\n",
-               i, mce_table[i].description);
-}
-
-int main(int argc, char *argv[])
-{
-    int type = 0;
-    int c, opt_index;
-    uint32_t domid;
-    xc_interface *xc_handle;
-    unsigned int cpu_nr;
-    uint64_t gaddr, max_gpa;
-
-    /* Default Value */
-    domid = DOMID_XEN;
-    gaddr = 0x180020;
-    cpu_nr = 0;
-
-    init_msr_inj();
-    xc_handle = xc_interface_open(0, 0, 0);
-    if ( !xc_handle ) {
-        Lprintf("Failed to get xc interface");
-        exit(EXIT_FAILURE);
-    }
-
-    while ( 1 ) {
-        c = getopt_long(argc, argv, "c:Dd:t:hp:l", opts, &opt_index);
-        if ( c == -1 )
-            break;
-        switch ( c ) {
-        case 'D':
-            dump=1;
-            break;
-        case 'c':
-            cpu_nr = strtoul(optarg, &optarg, 10);
-            if ( strlen(optarg) != 0 )
-                err(xc_handle, "Please input a digit parameter for CPU");
-            break;
-        case 'd':
-            domid = strtol(optarg, &optarg, 10);
-            if ( strlen(optarg) != 0 )
-                err(xc_handle, "Please input a digit parameter for domain");
-            break;
-        case 'p':
-            gaddr = strtol(optarg, &optarg, 0);
-            if ( strlen(optarg) != 0 )
-                err(xc_handle, "Please input correct page address");
-            break;
-        case 't':
-            type = strtol(optarg, NULL, 0);
-            break;
-        case 'l':
-            lmce = 1;
-            break;
-        case 'h':
-        default:
-            help();
-            return 0;
-        }
-    }
-
-    if ( domid != DOMID_XEN ) {
-        max_gpa = xs_get_dom_mem(domid);
-        Lprintf("get domain %d max gpa is: 0x%lx", domid, max_gpa);
-        if ( gaddr >= max_gpa )
-            err(xc_handle, "Fail: gaddr exceeds max_gpa 0x%lx", max_gpa);
-    }
-    Lprintf("get gaddr of error inject is: 0x%lx", gaddr);
-
-    if ( dump ) {
-        if ( domid == DOMID_XEN )
-            Lprintf("Xen: gaddr=0x%lx", gaddr);
-        else
-            Lprintf("Dom%d: gaddr=0x%lx", domid, gaddr);
-        goto out;
-    }
-
-    if ( type < 0 || type >= MCE_TABLE_SIZE ) {
-        err(xc_handle, "Unsupported error type");
-        goto out;
-    }
-
-    inject(xc_handle, &mce_table[type], cpu_nr, domid, gaddr);
-
- out:
-    xc_interface_close(xc_handle);
-    return 0;
-}
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.