1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#!/bin/bash
# GENCACHE cpu level type track
# generate a memory error. All fields are optional.
# see SDM 3a chapter 15 for details
#
# level:
# 0 level 0
# 1 level 1
# 2 level 2
# 3 level generic
#
# ctype
# 0 instruction
# 1 data
# 2 generic
#
# track
# 0 no tracking
# 1 green: below threshold
# 2 yellow: above threshold
# 3 reserved
cpu=${1:-0}
level=${2:-0}
ctype=${3:-0}
track=${4:-1}
case "$ctype" in
instr) ctype=0 ;;
data) ctype=1 ;;
generic) ctype=2 ;;
[0-3]) ;;
*) echo "Unknown ctype $ctype" ; exit 1
esac
case "$level" in
L0) level=0 ;;
L1) level=1 ;;
L2) level=2 ;;
LG) level=3 ;;
[0-3]) ;;
*) echo "Unknown Cache $level" ; exit 1
esac
case "$track" in
none) track=0 ;;
green) track=1 ;;
yellow) track=2 ;;
[0-3]) ;;
*) echo "Unknown tracking flag $track" ; exit 1
esac
echo "# cache error on cpu $cpu level $level type $ctype track $track"
echo "CPU $cpu 2" # XXX use cpu in socket
echo "# nehalem"
echo "PROCESSOR 0:0x106a0"
printf "MCGCAP 0x%x\n" $[1 << 11]
printf "STATUS 0x%08x%08x\n" \
$[0x88000000 + ($track << (53-32))] $[0x100 + $level + ($ctype << 2)]
|