1f08c3bdfSopenharmony_ci#!/bin/bash
2f08c3bdfSopenharmony_ci#
3f08c3bdfSopenharmony_ci# Simple test driver: run test cases one by one, assuming test case
4f08c3bdfSopenharmony_ci# will not trigger panic or reboot.
5f08c3bdfSopenharmony_ci#
6f08c3bdfSopenharmony_ci# Copyright (C) 2008, Intel Corp.
7f08c3bdfSopenharmony_ci#   Author: Huang Ying <ying.huang@intel.com>
8f08c3bdfSopenharmony_ci#
9f08c3bdfSopenharmony_ci# This file is released under the GPLv2.
10f08c3bdfSopenharmony_ci#
11f08c3bdfSopenharmony_ci
12f08c3bdfSopenharmony_cisd=$(dirname "$0")
13f08c3bdfSopenharmony_ciexport ROOT=`(cd $sd/../..; pwd)`
14f08c3bdfSopenharmony_ci
15f08c3bdfSopenharmony_ciexport driver=simple
16f08c3bdfSopenharmony_ci
17f08c3bdfSopenharmony_ci. $ROOT/lib/functions.sh
18f08c3bdfSopenharmony_cisetup_path
19f08c3bdfSopenharmony_ci. $ROOT/lib/dirs.sh
20f08c3bdfSopenharmony_ci. $ROOT/lib/mce.sh
21f08c3bdfSopenharmony_ci
22f08c3bdfSopenharmony_citmp_klog=$WDIR/simple_klog_tmp
23f08c3bdfSopenharmony_ci
24f08c3bdfSopenharmony_cichk_err()
25f08c3bdfSopenharmony_ci{
26f08c3bdfSopenharmony_ci    if [ \( -n "$DEBUG_MCE_TEST" \) -a \( -s $err_log \) ]; then
27f08c3bdfSopenharmony_ci	cat $err_log
28f08c3bdfSopenharmony_ci    fi
29f08c3bdfSopenharmony_ci}
30f08c3bdfSopenharmony_ci
31f08c3bdfSopenharmony_ciklog_begin()
32f08c3bdfSopenharmony_ci{
33f08c3bdfSopenharmony_ci    dmesg > $tmp_klog.1
34f08c3bdfSopenharmony_ci}
35f08c3bdfSopenharmony_ci
36f08c3bdfSopenharmony_ciklog_end()
37f08c3bdfSopenharmony_ci{
38f08c3bdfSopenharmony_ci    dmesg | sed -e '1d' > $tmp_klog.2
39f08c3bdfSopenharmony_ci    diff $tmp_klog.1 $tmp_klog.2 | grep '^> ' | sed 's/> \(.*\)/\1/' > $klog
40f08c3bdfSopenharmony_ci}
41f08c3bdfSopenharmony_ci
42f08c3bdfSopenharmony_citrigger()
43f08c3bdfSopenharmony_ci{
44f08c3bdfSopenharmony_ci    reset_gcov
45f08c3bdfSopenharmony_ci
46f08c3bdfSopenharmony_ci    $CDIR/$case_sh trigger
47f08c3bdfSopenharmony_ci}
48f08c3bdfSopenharmony_ci
49f08c3bdfSopenharmony_ciget_result()
50f08c3bdfSopenharmony_ci{
51f08c3bdfSopenharmony_ci    $CDIR/$case_sh get_result
52f08c3bdfSopenharmony_ci}
53f08c3bdfSopenharmony_ci
54f08c3bdfSopenharmony_citest_all()
55f08c3bdfSopenharmony_ci{
56f08c3bdfSopenharmony_ci    if [ -n "$GCOV" ]; then
57f08c3bdfSopenharmony_ci	if chk_gcov; then
58f08c3bdfSopenharmony_ci	    export GCOV=copy
59f08c3bdfSopenharmony_ci	    export KSRC_DIR
60f08c3bdfSopenharmony_ci	else
61f08c3bdfSopenharmony_ci	    echo "gcov is not supported by kernel or there is no " \
62f08c3bdfSopenharmony_ci		"gcov utility installed"
63f08c3bdfSopenharmony_ci	    echo "disabling gcov support."
64f08c3bdfSopenharmony_ci	    unset GCOV
65f08c3bdfSopenharmony_ci	fi
66f08c3bdfSopenharmony_ci    fi
67f08c3bdfSopenharmony_ci
68f08c3bdfSopenharmony_ci    #if mce_inject is a module, it is ensured to have been loaded
69f08c3bdfSopenharmony_ci    modinfo mce_inject > /dev/null 2>&1
70f08c3bdfSopenharmony_ci    if [ $? -eq 0 ]; then
71f08c3bdfSopenharmony_ci        lsmod | grep mce_inject > /dev/null 2>&1
72f08c3bdfSopenharmony_ci        [ $? -eq 0 ] || modprobe mce_inject
73f08c3bdfSopenharmony_ci        [ $? -eq 0 ] || die "module mce_inject isn't supported ?"
74f08c3bdfSopenharmony_ci    fi
75f08c3bdfSopenharmony_ci
76f08c3bdfSopenharmony_ci    for case_sh in $CASES; do
77f08c3bdfSopenharmony_ci	for this_case in $($CDIR/$case_sh enumerate); do
78f08c3bdfSopenharmony_ci	    set_fake_panic 1
79f08c3bdfSopenharmony_ci
80f08c3bdfSopenharmony_ci	    export this_case
81f08c3bdfSopenharmony_ci	    mkdir -p $RDIR/$this_case
82f08c3bdfSopenharmony_ci	    rm -rf $RDIR/$this_case/*
83f08c3bdfSopenharmony_ci	    echo -e "\n$this_case:" | tee -a $RDIR/result
84f08c3bdfSopenharmony_ci	    klog=$RDIR/$this_case/klog
85f08c3bdfSopenharmony_ci
86f08c3bdfSopenharmony_ci	    mkdir -p $WDIR/$this_case
87f08c3bdfSopenharmony_ci	    rm -rf $WDIR/$this_case/*
88f08c3bdfSopenharmony_ci	    local err_log=$WDIR/$this_case/err_log
89f08c3bdfSopenharmony_ci
90f08c3bdfSopenharmony_ci	    klog_begin
91f08c3bdfSopenharmony_ci	    trigger 2>$err_log | tee -a $RDIR/result
92f08c3bdfSopenharmony_ci	    chk_err
93f08c3bdfSopenharmony_ci	    random_sleep
94f08c3bdfSopenharmony_ci	    klog_end
95f08c3bdfSopenharmony_ci	    get_result 2>$err_log | tee -a $RDIR/result
96f08c3bdfSopenharmony_ci	    chk_err
97f08c3bdfSopenharmony_ci	    $CDIR/$case_sh verify 2>$err_log | tee -a $RDIR/result
98f08c3bdfSopenharmony_ci	    chk_err
99f08c3bdfSopenharmony_ci
100f08c3bdfSopenharmony_ci	    set_fake_panic 0
101f08c3bdfSopenharmony_ci	done
102f08c3bdfSopenharmony_ci    done
103f08c3bdfSopenharmony_ci}
104f08c3bdfSopenharmony_ci
105f08c3bdfSopenharmony_ciif [ $# -lt 1 ]; then
106f08c3bdfSopenharmony_ci    die "Usage: $0 <config>"
107f08c3bdfSopenharmony_cifi
108f08c3bdfSopenharmony_ci
109f08c3bdfSopenharmony_ciconf=$(basename "$1")
110f08c3bdfSopenharmony_ci
111f08c3bdfSopenharmony_ci. $CONF_DIR/$conf
112f08c3bdfSopenharmony_ci
113f08c3bdfSopenharmony_cidriver_prepare
114f08c3bdfSopenharmony_ciset_panic_on_oops 0
115f08c3bdfSopenharmony_ci
116f08c3bdfSopenharmony_ciif [ -n "$START_BACKGROUND" ]; then
117f08c3bdfSopenharmony_ci    eval $START_BACKGROUND
118f08c3bdfSopenharmony_cielse
119f08c3bdfSopenharmony_ci    start_background
120f08c3bdfSopenharmony_cifi
121f08c3bdfSopenharmony_ci
122f08c3bdfSopenharmony_ci[ -d $RDIR ] && mv $RDIR --backup=numbered -T $RDIR.old
123f08c3bdfSopenharmony_ci[ -d $WDIR ] && mv $WDIR --backup=numbered -T $WDIR.old
124f08c3bdfSopenharmony_ci
125f08c3bdfSopenharmony_citest_all
126f08c3bdfSopenharmony_ci
127f08c3bdfSopenharmony_ciif [ -n "$STOP_BACKGROUND" ]; then
128f08c3bdfSopenharmony_ci    eval $STOP_BACKGROUND
129f08c3bdfSopenharmony_cielse
130f08c3bdfSopenharmony_ci    stop_background
131f08c3bdfSopenharmony_cifi
132f08c3bdfSopenharmony_ci
133