mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
2c7242bb2a
commit
79ca512a1f
20 files changed
+18
-1132
No files matched your search
@@ -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,4 +1,5 @@
|
||||
xen-access
|
||||
xen-mceinj
|
||||
xen-memshare
|
||||
xen-ucode
|
||||
xen-vmtrace
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
.PHONY: all clean distclean
|
||||
|
||||
all:
|
||||
$(MAKE) -C tools
|
||||
|
||||
clean:
|
||||
$(MAKE) -C tools clean
|
||||
|
||||
distclean:
|
||||
$(MAKE) -C tools distclean
|
||||
|
||||
install uninstall:
|
||||
@@ -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 "$@"
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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"
|
||||