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@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2021-07-09 16:38:27 +01:00
1 parent 2c7242bb2a
commit 79ca512a1f
20 files changed
+24 -1138

No files matched your search

-1
View File
@@ -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
+1
View File
@@ -1,4 +1,5 @@
xen-access
xen-mceinj
xen-memshare
xen-ucode
xen-vmtrace
+4
View File
@@ -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)
@@ -137,7 +137,7 @@ static void err(xc_interface *xc_handle, const char *fmt, ...)
va_list args;
va_start(args, fmt);
if (vasprintf(&buf, fmt, args) < 0)
if ( vasprintf(&buf, fmt, args) < 0 )
abort();
perror(buf);
va_end(args);
@@ -173,7 +173,7 @@ static unsigned int mca_cpuinfo(xc_interface *xc_handle)
mc.cmd = XEN_MC_physcpuinfo;
mc.interface_version = XEN_MCA_INTERFACE_VERSION;
if (!xc_mca_op(xc_handle, &mc))
if ( !xc_mca_op(xc_handle, &mc) )
return mc.u.mc_physcpuinfo.ncpus;
else
return 0;
@@ -187,9 +187,9 @@ static int inject_cmci(xc_interface *xc_handle, unsigned int cpu_nr)
memset(&mc, 0, sizeof(struct xen_mc));
nr_cpus = mca_cpuinfo(xc_handle);
if (!nr_cpus)
if ( !nr_cpus )
err(xc_handle, "Failed to get mca_cpuinfo");
if (cpu_nr >= nr_cpus)
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;
@@ -284,7 +284,7 @@ static int add_msr_intpose(xc_interface *xc_handle,
flush_msr_inj(xc_handle);
init_msr_inj();
}
count= msr_inj.mcinj_count;
count = msr_inj.mcinj_count;
if ( !count )
{
@@ -422,7 +422,7 @@ static long xs_get_dom_mem(int domid)
if (!memstr || !plen)
return -1;
mem = atoll(memstr)*1024;
mem = atoll(memstr) * 1024;
free(memstr);
return mem;
@@ -474,17 +474,20 @@ int main(int argc, char *argv[])
cpu_nr = 0;
init_msr_inj();
xc_handle = xc_interface_open(0, 0, 0);
if ( !xc_handle ) {
xc_handle = xc_interface_open(NULL, NULL, 0);
if ( !xc_handle )
{
Lprintf("Failed to get xc interface");
exit(EXIT_FAILURE);
}
while ( 1 ) {
while ( 1 )
{
c = getopt_long(argc, argv, "c:Dd:t:hp:l", opts, &opt_index);
if ( c == -1 )
break;
switch ( c ) {
switch ( c )
{
case 'D':
dump=1;
break;
@@ -516,7 +519,8 @@ int main(int argc, char *argv[])
}
}
if ( domid != DOMID_XEN ) {
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 )
@@ -524,7 +528,8 @@ int main(int argc, char *argv[])
}
Lprintf("get gaddr of error inject is: 0x%lx", gaddr);
if ( dump ) {
if ( dump )
{
if ( domid == DOMID_XEN )
Lprintf("Xen: gaddr=0x%lx", gaddr);
else
@@ -532,7 +537,8 @@ int main(int argc, char *argv[])
goto out;
}
if ( type < 0 || type >= MCE_TABLE_SIZE ) {
if ( type < 0 || type >= MCE_TABLE_SIZE )
{
err(xc_handle, "Unsupported error type");
goto out;
}
-1
View File
@@ -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
-12
View File
@@ -1,12 +0,0 @@
.PHONY: all clean distclean
all:
$(MAKE) -C tools
clean:
$(MAKE) -C tools clean
distclean:
$(MAKE) -C tools distclean
install uninstall:
-75
View File
@@ -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.
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
@@ -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@intel.com>
#
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 "$@"
-24
View File
@@ -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@intel.com>
#
export MCE_SRAO_MEM=0
export MCE_SRAO_LLC=1
export CMCI_UCNA_LLC=2
-260
View File
@@ -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@intel.com>
#
. $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
}
-24
View File
@@ -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)
-24
View File
@@ -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"
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.