Date: Sun, 18 Feb 2018 18:41:30 +0200 From: Nikos Kastanas <zerotronic@gmail.com> To: freebsd-ports@freebsd.org Subject: sysutils/devcpu-data error "Please update your system in order to update CPU microcode." Message-ID: <CAJPDrRtMNM=_wORec0R19YoKDeN9PqQEqht09G0sWzRfLsf9TA@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Hello I have a problem that i cannot seem to able to find the answer to. I have a Lenovo X220 laptop that runs FreeBSD-11.1-RELEASE fully updated with freebsd-update I installed sysutils/devcpu-data in order to update the cpu microcode, then i checked that cpuctl is loaded in kldload and then i added microcode_update_enable="YES" in /etc/rc.conf When i run service microcode_update start i always get the error "Please update your system in order to update CPU microcode." After checking in the microcode_update rc script i see the following: https://svnweb.freebsd.org/ports/head/sysutils/devcpu-data/files/microcode_update.in?revision=459084&view=markup 58 if [ "${microcode_cpus}" = "ALL" ]; then 59 CPUCONTROL_UPDATED=$(cpucontrol -h 2>&1 | grep -q -- -e; echo $?) 60 if [ ${CPUCONTROL_UPDATED} -ne 0 ]; then 61 echo "Please update your system in order to update CPU microcode." 62 else >From what i can understand the script is trying to run "cpucontrol -h 2>&1 | grep -q -- -e" and then get the exit code. If the exit code is 0 then all is ok but if the exit code is not equal to zero then it displays that error message. So i tried to run "cpucontrol -h | grep -q -- -e" manually as root and it dispayed the usage as it should, but when i checked the exit code with "echo $?" i got 1. After running only "cpucontrol -h" i get an exit code of 64. Then i decided to take a look in the cpucontrol source code in the svn repository https://svnweb.freebsd.org/base/release/11.1.0/usr.sbin/cpucontrol/cpucontrol.c?revision=321354&view=markup and this is what i found: 453 case 'h': 454 /* FALLTHROUGH */ 455 default: 456 usage(); 457 /* NOTREACHED */ 458 } which, if i understand correctly, means that when i run "cpucontrol -h" then it falls through to the default case which is to run the usage() function. After checking the usage() function i found the following: 109 usage(void) 110 { 111 const char *name; 112 113 name = getprogname(); 114 if (name == NULL) 115 name = "cpuctl"; 116 fprintf(stderr, "Usage: %s [-vh] [-d datadir] [-m msr[=value] | " 117 "-i level | -i level,level_type | -u] device\n", name); 118 exit(EX_USAGE); 119 } If i understand correctly this function will display the usage of the program and then always exit with an exit code of EX_USAGE, which according to https://www.freebsd.org/cgi/man.cgi?sysexits(3) is is equal to 64 and means that the command was used incorrectly. If devcpu-data expects cpucontrol usage to exit with 0 in order for it to run the update, but cpucontrol usage always exits with 64 then the update will never happen. I will always get the error message "Please update your system in order to update CPU microcode." My question is how can i fix that so i can update my cpu microcode? Thank you for your time Best regards, Nikos Kastanas -- email : zerotronic@gmail.com nik.kastanas@gmail.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJPDrRtMNM=_wORec0R19YoKDeN9PqQEqht09G0sWzRfLsf9TA>