# # Software Inject library: Software inject specific functions # # Copyright (C) 2008, Intel Corp. # Author: Huang Ying # # 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 }