sysutils/devcpu-data error "Please update your system in order to update CPU microcode."

Nikos Kastanas zerotronic at
Sun Feb 18 16:41:32 UTC 2018


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:

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
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
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()

After checking the usage() function i found the following:

109     usage(void)
110     {
111             const char *name;
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 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 at
           nik.kastanas at

More information about the freebsd-ports mailing list