blob: 45936f20a83ec6fd6840b8900bc2b7f3d2181fa3 [file]
#!/bin/sh
# cache error trigger. This shell script is executed by mcelog in daemon mode
# when a CPU reports excessive corrected cache errors. This could be a indication
# for future uncorrected errors.
#
# environment:
# MESSAGE Human readable error message
# CPU Linux CPU number that triggered the error
# LEVEL Cache level affected by error
# TYPE Cache type affected by error (Data,Instruction,Generic)
# AFFECTED_CPUS List of CPUs sharing the affected cache
# SOCKETID Socket ID of affected CPU
#
# note: will run as mcelog configured user
# this can be changed in mcelog.conf
#
# Change "DO_OFFLINE" to "1" if you want to
# offline the CPUs sharing the affected cache
#
DO_OFFLINE=0
EXIT=0
logger -s -p daemon.crit -t mcelog "Level $LEVEL cache error threshold affects CPUs: $AFFECTED_CPUS"
if [ $DO_OFFLINE = 0 -o $AFFECTED_CPUS = unknown ]
then
exit $EXIT
fi
if [ $(echo $AFFECTED_CPUS | wc -w) -ge $(grep -c ^processor /proc/cpuinfo) ]
then
logger -s -p daemon.crit -t mcelog "Too many CPUs affected by cache error threshold to offline"
exit $EXIT
fi
for i in $AFFECTED_CPUS ; do
logger -s -p daemon.crit -t mcelog "Offlining CPU $i due to cache error threshold"
F=$(printf "/sys/devices/system/cpu/cpu%d/online" $i)
echo 0 > $F
if [ "$(cat $F)" != "0" ] ; then
logger -s -p daemon.warn -t mcelog "Offlining CPU $i failed"
EXIT=1
fi
done
[ -x ./cache-error-trigger.local ] && . ./cache-error-trigger.local
exit $EXIT