From e4b3410eba4dd2b57564b201777f5d8c15938ba4 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Sat, 8 Jan 2005 08:23:02 +0000 Subject: [PATCH] auto-import microcode_ctl-1.10-1.1 on branch devel from microcode_ctl-1.10-1.1.src.rpm --- .cvsignore | 1 + microcode_ctl.init | 86 +++++++++++++++++++++++++++++++++++++++++++++ microcode_ctl.patch | 74 ++++++++++++++++++++++++++++++++++++++ microcode_ctl.spec | 71 +++++++++++++++++++++++++++++++++++++ sources | 1 + 5 files changed, 233 insertions(+) create mode 100755 microcode_ctl.init create mode 100644 microcode_ctl.patch create mode 100644 microcode_ctl.spec diff --git a/.cvsignore b/.cvsignore index e69de29..f256cba 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +microcode_ctl-1.10.tar.gz diff --git a/microcode_ctl.init b/microcode_ctl.init new file mode 100755 index 0000000..2f9d32c --- /dev/null +++ b/microcode_ctl.init @@ -0,0 +1,86 @@ +#!/bin/bash +# chkconfig: - 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 + +DEVICE=/dev/cpu/0/microcode +ARGUMENTS=-Qu +RETVAL=0 +PROGRAM=/sbin/microcode_ctl + +# 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 + +if [ ! -e /etc/firmware/microcode.dat ]; +then + echo $"$0: microcode datafile not present (/etc/firmware/microcode.dat)" + exit 1 +fi + + +. /etc/init.d/functions + +# perform the update +function start () +{ + RETVAL=1 + # Make sure we are on an intel machine + vendor=`cat /proc/cpuinfo | \ + grep "^vendor_id" | sort -u | \ + awk -F ": " '{ print $2 }'` + if [ "$vendor" != "GenuineIntel" ]; then + return + fi + + # Microcode wasn't available until 686's. + family=`cat /proc/cpuinfo | \ + grep "^cpu family" | sort -u | \ + awk -F ": " '{ print $2 }'` + if [ $family -lt 6 ]; then + return + fi + + echo -n $"Applying Intel Microcode update: " + + daemon $PROGRAM $ARGUMENTS + RETVAL=$? + + # trap the most common case, errno 19 = no device + if [ $RETVAL -eq 19 ]; + then + echo $"$0: kernel does not have microcode device support" + fi + echo +} + + +case "$1" in + start|reload|force-reload|restart) + start + exit 0 + ;; + stop) + ;; + status) + # I wonder when the driver will let us do this... + # maybe I'll write it ;) + echo $"$0: reading microcode status is not yet supported" + ;; + *) + echo $"Usage: $0 {start|restart}" + exit 1 +esac diff --git a/microcode_ctl.patch b/microcode_ctl.patch new file mode 100644 index 0000000..315172f --- /dev/null +++ b/microcode_ctl.patch @@ -0,0 +1,74 @@ +--- microcode_ctl-1.10/microcode_ctl.c~ Sat Apr 14 23:18:13 2001 ++++ microcode_ctl-1.10/microcode_ctl.c Fri Dec 7 10:31:08 2001 +@@ -36,8 +36,8 @@ + #define BUFFER_SIZE 4096 + #define MAX_MICROCODE 2000000 + +-#define MICROCODE_DEVICE_DEFAULT "/dev/cpu/microcode" +-#define MICROCODE_FILE_DEFAULT "/etc/microcode.dat" ++#define MICROCODE_DEVICE_DEFAULT "/dev/cpu/0/microcode" ++#define MICROCODE_FILE_DEFAULT "/etc/firmware/microcode.dat" + + /* yuck */ + #ifndef MICROCODE_IOCFREE +--- microcode_ctl-1.10/Makefile~ Mon Jun 11 16:57:42 2001 ++++ microcode_ctl-1.10/Makefile Tue Jan 8 20:20:58 2002 +@@ -20,7 +20,7 @@ + PREFIX = /usr/local + + INSDIR = $(PREFIX)/sbin +-MANDIR = $(PREFIX)/man/man8 ++MANDIR = $(PREFIX)/share/man/man8 + MICDIR = /etc + + RCFILE = microcode_ctl.start +@@ -45,7 +45,7 @@ + $(DESTDIR)$(RCLINKTO) + +- $(INS) -s -m 755 $(PROGRAM) $(DESTDIR)$(INSDIR) ++ $(INS) -m 755 $(PROGRAM) $(DESTDIR)$(INSDIR) +- $(INS) -m 644 $(MICROCODE) $(DESTDIR)$(MICDIR)/microcode.dat ++ $(INS) -m 644 $(MICROCODE) $(DESTDIR)/etc/firmware/microcode.dat + + $(INS) -m 644 $(MANPAGE) $(DESTDIR)$(MANDIR) + gzip -9f $(DESTDIR)$(MANDIR)/$(MANPAGE) +--- microcode_ctl-1.10/microcode_ctl.c~ 2004-10-28 20:37:08.000000000 -0400 ++++ microcode_ctl-1.10/microcode_ctl.c 2004-10-28 20:37:35.000000000 -0400 +@@ -168,7 +168,7 @@ int main(int argc, char *argv[]) + + if (upload) { + if((return_code = do_update(device, filename))) +- exit(return_code); ++ exit(0); + } else + usage(); + +--- microcode_ctl-1.10/microcode_ctl.c.org 2003-05-28 19:56:22.000000000 +0200 ++++ microcode_ctl-1.10/microcode_ctl.c 2003-05-28 19:57:01.000000000 +0200 +@@ -95,11 +95,13 @@ + { + FILE *fd; + char line_buffer[BUFFER_SIZE]; +- int microcode[MAX_MICROCODE]; ++ int *microcode; + int *pos; + int outfd; + int wrote, length; + ++ microcode=malloc(sizeof(int)* MAX_MICROCODE); ++ if (!microcode) return ENOMEM; + + if( (fd=fopen(filename, "r")) == NULL){ + if(print_error_messages) +--- microcode_ctl-1.10/microcode_ctl.c~ 2003-12-13 15:05:56.000000000 +0100 ++++ microcode_ctl-1.10/microcode_ctl.c 2003-12-13 15:05:56.000000000 +0100 +@@ -146,7 +146,7 @@ + return errno; + } + +- if( (wrote = write(outfd, µcode, length)) < 0){ ++ if( (wrote = write(outfd, microcode, length)) < 0){ + if(print_error_messages) + fprintf(stderr, "%s: error writing to '%s' errno=%d (%s)\n" + "%s: there may be messages from the driver in your system log.\n", + diff --git a/microcode_ctl.spec b/microcode_ctl.spec new file mode 100644 index 0000000..7e5b9cf --- /dev/null +++ b/microcode_ctl.spec @@ -0,0 +1,71 @@ +Summary: Tool to update x86/x86-64 CPU microcode. +Name: microcode_ctl +Version: 1.10 +Release: %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?}) +Serial: 1 +Group: System Environment/Base +License: GPL +Source0: microcode_ctl-1.10.tar.gz +Source1: microcode_ctl.init +Buildroot: %{_tmppath}/%{name}-%{version}-root +Prereq: /sbin/chkconfig /sbin/service +Requires: fileutils kudzu +Obsoletes: kernel-utils +ExclusiveArch: i386 x86_64 + +Patch1: microcode_ctl.patch + +%description +microcode_ctl - updates the microcode on Intel x86/x86-64 CPU's + +%prep +%setup -q -c +%patch1 -p0 + +%build +rm -rf $RPM_BUILD_ROOT + +mkdir -p %{buildroot}/usr/sbin +mkdir -p %{buildroot}/usr/man +mkdir -p %{buildroot}/etc/rc.d/init.d +mkdir -p %{buildroot}/etc/sysconfig + +cd microcode_ctl-1.10 +make CFLAGS="$RPM_OPT_FLAGS" +cd .. + +%install +mkdir -p %{buildroot}/usr/share/man/man{1,8} + +cd microcode_ctl-1.10 + +make DESTDIR=$RPM_BUILD_ROOT PREFIX=%{_prefix} \ + INSDIR=/sbin MANDIR=%{_mandir}/man8 RCDIR=/etc MICDIR=/etc/firmware install clean + +install %{SOURCE1} %{buildroot}/etc/rc.d/init.d/microcode_ctl +rm %{buildroot}/etc/init.d/microcode_ctl +cd .. + +chmod -R a-s %{buildroot} +%clean +[ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT; + +%files +%defattr(-,root,root) +/etc/rc.d/init.d/microcode_ctl +/etc/firmware/* +/sbin/microcode_ctl +%attr(0644,root,root) %{_mandir}/*/* + +%preun +if [ "$1" = "0" ] ; then + /sbin/chkconfig --del microcode_ctl +fi + +%post +/sbin/chkconfig --add microcode_ctl + +%changelog +* Sat Dec 18 2004 Dave Jones +- Initial packaging, based upon kernel-utils. + diff --git a/sources b/sources index e69de29..50a83d4 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +ff8be753e5d5d7275495b7c99bdd55f3 microcode_ctl-1.10.tar.gz