microcode_ctl/microcode_ctl.init
2006-10-13 03:26:56 +00:00

101 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# chkconfig: 2345 0 99
# description: script to apply cpu microcode
# vars:
#
# START distribution specific way of kicking programs
# END distribution specific way of checking return status
# PROGRAM the executable to run
# ARGUMENTS the argument we're going to call PROGRAM with
# Check that we're a priviledged user
[ `id -u` = 0 ] || exit 0
DEVICE=/dev/cpu/microcode
ARGUMENTS=-Qu
RETVAL=0
PROGRAM=/sbin/microcode_ctl
DATAFILE=/etc/firmware/microcode.dat
. /etc/init.d/functions
RETVAL=0
# perform the update
function start ()
{
RETVAL=1
# Make sure we are on an Intel machine
vendor=`grep "^vendor_id" /proc/cpuinfo | head -n1 | awk -F ": " '{ print $2 }'`
[ "$vendor" != "GenuineIntel" ] && return
# Microcode wasn't available until 686's.
family=`grep "^cpu family" /proc/cpuinfo | head -n1 | awk -F ": " '{ print $2 }'`
[ $family -lt 6 ] && return
echo -n $"Applying Intel CPU microcode update: "
if [ ! -e $DATAFILE ]; then
echo $"$0: CPU microcode data file not present ($DATAFILE)"
exit 1
fi
/sbin/modprobe microcode
lt=0
while [ ! -c $DEVICE ]; do
lt=$[lt+1];
[ $lt -gt 5 ] && break;
sleep 1;
done
# Lets just be sure we have a device file...
if [ ! -e $DEVICE ]; then
echo $"$0: microcode device $DEVICE doesn't exist?"
exit 1
elif [ ! -c $DEVICE ]; then
echo $"$0: $DEVICE not a character device?"
exit 1
fi
daemon $PROGRAM $ARGUMENTS
RETVAL=$?
# trap the most common case, errno 19 = no device
if [ $RETVAL -eq 19 ]; then
echo $"$0: kernel does not have CPU microcode device support"
fi
/sbin/rmmod microcode
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/microcode_ctl
return $RETVAL
}
stop()
{
rm -f /var/lock/subsys/microcode_ctl
}
case "$1" in
start)
start
exit 0
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?