blob: 571df3ba47413cac4bad4fa58b9c655590d46e7e [file] [log] [blame]
#
# Software Inject library: Software inject specific functions
#
# Copyright (C) 2008, Intel Corp.
# Author: Huang Ying <ying.huang@intel.com>
#
# This file is released under the GPLv2.
#
if [ -n "$this_case" ]; then
bcase=$(basename $this_case)
fi
mcelog_result=$RDIR/$this_case/mcelog
klog=$RDIR/$this_case/klog
soft_inject_verify_mcelog()
{
# check mcelog
if [ -f $RDIR/$this_case/mcelog ]; then
if [ -f $SDIR/refer/$bcase ]; then
mcelog_refer=$SDIR/refer/$bcase
else
mcelog_refer=$SDIR/data/$bcase
fi
mce_reformat $mcelog_refer $RDIR/$this_case/mcelog_refer
if mce_cmp $RDIR/$this_case/mcelog $mcelog_refer "$removes"; then
echo " Passed: MCE log is ok"
else
echo " Failed: MCE log is different from input"
fi
else
echo " Failed: no MCE log result"
fi
}
soft_inject_get_klog()
{
local klog=$RDIR/$this_case/klog
local orig_klog=$RDIR/$this_case/orig_klog
if [ -f $klog ]; then
cp $klog $orig_klog
filter_fake_panic $orig_klog $klog
fi
}
soft_inject_get_mcelog()
{
case "$driver" in
simple*)
get_mcelog_from_dev $mcelog_result
;;
kdump*)
get_mcelog_from_klog $klog $mcelog_result
;;
*)
echo '!!! Unsupported driver !!!'
esac
}
# verify return value
soft_inject_verify_return_val()
{
if [ -f $RDIR/$this_case/return ] && \
[ $(cat $RDIR/$this_case/return) -eq 0 ]; then
echo " Passed: inject process continue"
else
echo " Failed: inject process killed"
fi
}
soft_inject_verify_kill()
{
if [ -f $RDIR/$this_case/return ] && \
[ $(cat $RDIR/$this_case/return) -eq 139 ]; then
echo " Passed: inject process killed!"
else
echo " Failed: Not killed"
fi
}
soft_inject_enumerate()
{
local base=$(relative_path ${CDIR} ${SDIR})
[ -z "$base" ] && die "BUG!!! Please contact your software vendor!"
for c in $(cd $SDIR/data; ls *[^~]); do
echo $base/$c
done
}
soft_inject_trigger()
{
mcelog &> /dev/null
case "$driver" in
kdump*)
mce-inject --no-random $SDIR/data/$bcase
;;
*)
mce-inject $SDIR/data/$bcase
;;
esac
ret=$?
echo $ret > $RDIR/$this_case/return
sleep 1
}
soft_inject_verify_panic()
{
local mce_panic="$1"
verify_panic_via_klog $klog "$mce_panic"
}
soft_inject_verify_timeout()
{
verify_timeout_via_klog $klog
}
soft_inject_verify_exp()
{
verify_exp_via_klog $klog "$@"
}
soft_inject_main()
{
op="$1"
shift
case "$op" in
enumerate)
enumerate
;;
trigger)
trigger "$@"
;;
get_result)
get_result
;;
verify)
verify
;;
*)
die "Usage: $0 enumerate|trigger|get_result|verify"
esac
exit 0
}