Intel microcode updates not applied?

I’ve recently updated my Core2Quad rig to i5-6500 (Skylake). I have an NVidia card and I’m using the proprietary driver ( local rebuild from X11:Drivers/nvidia-gfxG04 ).

I’ve started getting random crashes in applications, all of them quite similar

Core was generated by `/opt/eclipse/eclipse'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f65124a07e0 in __lll_unlock_elision () from /lib64/libpthread.so.0
(gdb) bt
#0  0x00007f65124a07e0 in __lll_unlock_elision () at /lib64/libpthread.so.0
#1  0x00007f650d30f26c in  () at /usr/X11R6/lib64/libEGL.so.1
#2  0x00007f650d29fa22 in  () at /usr/X11R6/lib64/libEGL.so.1
#3  0x00007fff53af90f0 in  ()
#4  0x00007f650d323ea1 in  () at /usr/X11R6/lib64/libEGL.so.1
#5  0x00007fff53af90f0 in  ()
#6  0x00007f65126ba795 in _dl_fini () at /lib64/ld-linux-x86-64.so.2

That one was for Eclipse, but kdm and kscreenlocker also crashed in similar manners. Google seems to indicate that I’m running an old version of the NVidia driver and have an outdated microcode version for my CPU ( see https://www.reddit.com/r/archlinux/comments/36zq3y/libeglso1_nvidialibgl_relation_to_segmentation/ or https://bbs.archlinux.org/viewtopic.php?id=207305 ). I do have an outdated NVidia driver ( 352.63 ) and I’m building the new version as we speak, but I’m surprised that the microcode update is not applied.

I do have the latest version of the ucode-intel package

$ rpm -q ucode-intel 
ucode-intel-20151106-2.1.x86_64

And the following info in the kernel logs

$ dmesg | grep microcode
    1.834441] microcode: CPU0 sig=0x506e3, pf=0x2, revision=0x23
    1.834562] microcode: CPU1 sig=0x506e3, pf=0x2, revision=0x23
    1.834565] microcode: CPU2 sig=0x506e3, pf=0x2, revision=0x23
    1.834620] microcode: CPU3 sig=0x506e3, pf=0x2, revision=0x23
    1.834961] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

However, the microcode should be updated to at least

    0.316239] microcode: CPU0 sig=0x506e3, pf=0x2, revision=0x39

according to the Arch Linux forums.

How can I debug why the microcode update is not applied?

For the record, I regenerated the initrd which seems to include the microcode updates. But after a reboot I still get the old revision

# mkinitrd
Creating initrd: /boot/initrd-4.4.0-3-default
dracut: Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force --force-drivers "xennet xenblk" /boot/initrd-4.4.0-3-default 4.4.0-3-default
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: btrfs ***
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: rootfs-block ***
dracut: *** Including module: terminfo ***
dracut: *** Including module: udev-rules ***
dracut: Skipping udev rule: 40-redhat.rules
dracut: Skipping udev rule: 50-firmware.rules
dracut: Skipping udev rule: 50-udev.rules
dracut: Skipping udev rule: 91-permissions.rules
dracut: Skipping udev rule: 80-drivers-modprobe.rules
dracut: *** Including module: dracut-systemd ***
dracut: *** Including module: haveged ***
dracut: *** Including module: usrmount ***
dracut: *** Including module: base ***
dracut: *** Including module: fs-lib ***
dracut: *** Including module: shutdown ***
dracut: *** Including module: suse ***
dracut: *** Including modules done ***
dracut: *** Installing kernel module dependencies and firmware ***
dracut: *** Installing kernel module dependencies and firmware done ***
dracut: *** Resolving executable dependencies ***
dracut: *** Resolving executable dependencies done***
dracut: *** Hardlinking files ***                                                                                                                                                                                                            
dracut: *** Hardlinking files done ***                                                                                                                                                                                                       
dracut: *** Stripping files ***                                                                                                                                                                                                              
dracut: *** Stripping files done ***                                                                                                                                                                                                         
dracut: *** Generating early-microcode cpio image ***                                                                                                                                                                                        
dracut: *** Constructing GenuineIntel.bin ****                                                                                                                                                                                               
dracut: *** Store current command line parameters ***                                                                                                                                                                                        
dracut: Stored kernel commandline:                                                                                                                                                                                                           
dracut: rd.driver.pre=xennet                                                                                                                                                                                                                 
rd.driver.pre=xenblk                                                                                                                                                                                                                         
dracut:  root=UUID=54dea125-74cd-4bb2-86a2-f7bc645b76cf rootfstype=btrfs rootflags=rw,relatime,ssd,space_cache,subvolid=1492,subvol=/.snapshots/359/snapshot,subvol=.snapshots/359/snapshot                                                  
dracut: *** Creating image file '/boot/initrd-4.4.0-3-default' ***                                                                                                                                                                           
dracut: *** Creating initramfs image file '/boot/initrd-4.4.0-3-default' done ***

Please show output of

grep -E 'family|model|stepping' -m 4 /proc/cpuinfo
$ grep -E 'family|model|stepping' -m 4 /proc/cpuinfo
cpu family      : 6
model           : 94
model name      : Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
stepping        : 3

I do not see microcode for this CPU in ucode-intel package, nor in source archive from Intel.

Ah, it seems that I was mistaken - and since the nvidia driver update has fixed the crashes I’ll stop pursuing this.

Thank you.

hi, i missing my microde too… what can I do ?

# uname -a
Linux linux02 4.4.103-18.41-default #1 SMP Wed Dec 13 14:06:33 UTC 2017 (f66c68c) x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/os-release 
NAME="openSUSE Leap"
VERSION="42.2"
ID=opensuse
ID_LIKE="suse"
VERSION_ID="42.2"
PRETTY_NAME="openSUSE Leap 42.2"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:42.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"

# dmesg | grep microcode
    0.000000] microcode: CPU0 microcode updated early to revision 0x1c, date = 2015-02-26
    0.074666] microcode: CPU1 microcode updated early to revision 0x1c, date = 2015-02-26
    0.077622] microcode: CPU2 microcode updated early to revision 0x1c, date = 2015-02-26
    0.080588] microcode: CPU3 microcode updated early to revision 0x1c, date = 2015-02-26
    1.472293] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1c
    1.472309] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1c
    1.472325] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1c
    1.472341] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1c
    1.472354] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1c
    1.472366] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1c
    1.472377] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1c
    1.472388] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1c
    1.472452] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

# grep -E 'family|model|stepping' -m 4 /proc/cpuinfo
cpu family      : 6
model           : 58
model name      : Intel(R) Xeon(R) CPU E3-1275 V2 @ 3.50GHz
stepping        : 9

# rpm -ql ucode-intel                                  
/lib/firmware/intel-ucode
/lib/firmware/intel-ucode/06-03-02
/lib/firmware/intel-ucode/06-05-00
/lib/firmware/intel-ucode/06-05-01
/lib/firmware/intel-ucode/06-05-02
/lib/firmware/intel-ucode/06-05-03
/lib/firmware/intel-ucode/06-06-00
/lib/firmware/intel-ucode/06-06-05
/lib/firmware/intel-ucode/06-06-0a
/lib/firmware/intel-ucode/06-06-0d
/lib/firmware/intel-ucode/06-07-01
/lib/firmware/intel-ucode/06-07-02
/lib/firmware/intel-ucode/06-07-03
/lib/firmware/intel-ucode/06-08-01
/lib/firmware/intel-ucode/06-08-03
/lib/firmware/intel-ucode/06-08-06
/lib/firmware/intel-ucode/06-08-0a
/lib/firmware/intel-ucode/06-09-05
/lib/firmware/intel-ucode/06-0a-00
/lib/firmware/intel-ucode/06-0a-01
/lib/firmware/intel-ucode/06-0b-01
/lib/firmware/intel-ucode/06-0b-04
/lib/firmware/intel-ucode/06-0d-06
/lib/firmware/intel-ucode/06-0e-08
/lib/firmware/intel-ucode/06-0e-0c
/lib/firmware/intel-ucode/06-0f-02
/lib/firmware/intel-ucode/06-0f-06
/lib/firmware/intel-ucode/06-0f-07
/lib/firmware/intel-ucode/06-0f-0a
/lib/firmware/intel-ucode/06-0f-0b
/lib/firmware/intel-ucode/06-0f-0d
/lib/firmware/intel-ucode/06-16-01
/lib/firmware/intel-ucode/06-17-06
/lib/firmware/intel-ucode/06-17-07
/lib/firmware/intel-ucode/06-17-0a
/lib/firmware/intel-ucode/06-1a-04
/lib/firmware/intel-ucode/06-1a-05
/lib/firmware/intel-ucode/06-1c-02
/lib/firmware/intel-ucode/06-1c-0a
/lib/firmware/intel-ucode/06-1d-01
/lib/firmware/intel-ucode/06-1e-05
/lib/firmware/intel-ucode/06-25-02
/lib/firmware/intel-ucode/06-25-05
/lib/firmware/intel-ucode/06-26-01
/lib/firmware/intel-ucode/06-2a-07
/lib/firmware/intel-ucode/06-2d-06
/lib/firmware/intel-ucode/06-2d-07
/lib/firmware/intel-ucode/06-2f-02
/lib/firmware/intel-ucode/06-3a-09 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/lib/firmware/intel-ucode/06-3c-03
/lib/firmware/intel-ucode/06-3d-04
/lib/firmware/intel-ucode/06-3e-04
/lib/firmware/intel-ucode/06-3e-06
/lib/firmware/intel-ucode/06-3e-07
/lib/firmware/intel-ucode/06-3f-02
/lib/firmware/intel-ucode/06-3f-04
/lib/firmware/intel-ucode/06-45-01
/lib/firmware/intel-ucode/06-46-01
/lib/firmware/intel-ucode/06-47-01
/lib/firmware/intel-ucode/06-4e-03
/lib/firmware/intel-ucode/06-4f-01
/lib/firmware/intel-ucode/06-55-04
/lib/firmware/intel-ucode/06-56-02
/lib/firmware/intel-ucode/06-56-03
/lib/firmware/intel-ucode/06-56-04
/lib/firmware/intel-ucode/06-5e-03
/lib/firmware/intel-ucode/06-8e-09
/lib/firmware/intel-ucode/06-8e-0a
/lib/firmware/intel-ucode/06-9e-09
/lib/firmware/intel-ucode/0f-00-07
/lib/firmware/intel-ucode/0f-00-0a
/lib/firmware/intel-ucode/0f-01-02
/lib/firmware/intel-ucode/0f-02-04
/lib/firmware/intel-ucode/0f-02-05
/lib/firmware/intel-ucode/0f-02-06
/lib/firmware/intel-ucode/0f-02-07
/lib/firmware/intel-ucode/0f-02-09
/lib/firmware/intel-ucode/0f-03-02
/lib/firmware/intel-ucode/0f-03-03
/lib/firmware/intel-ucode/0f-03-04
/lib/firmware/intel-ucode/0f-04-01
/lib/firmware/intel-ucode/0f-04-03
/lib/firmware/intel-ucode/0f-04-04
/lib/firmware/intel-ucode/0f-04-07
/lib/firmware/intel-ucode/0f-04-08
/lib/firmware/intel-ucode/0f-04-09
/lib/firmware/intel-ucode/0f-04-0a
/lib/firmware/intel-ucode/0f-06-02
/lib/firmware/intel-ucode/0f-06-04
/lib/firmware/intel-ucode/0f-06-05
/lib/firmware/intel-ucode/0f-06-08
/usr/bin/generate_microcode
/usr/share/doc/packages/ucode-intel
/usr/share/doc/packages/ucode-intel/LICENSE

This is how mozo looks on my system, you should see similar.
You’ll notice I’m not <deleting> any entries, only <unchecking> items so they still exist but are not displayed.
All works as expected, am not seeing unusual behavior.

  1. The default mozo editor, In my case I simply typed “mozo” into the search input field and clicked on the result

https://en.opensuse.org/images/9/92/MATE_mozo_default_1.png

  1. Display the default contents of “other” folder. When I uncheck YaST modules in the next screenshot after this one, the contents of this “other” folder does not change

https://en.opensuse.org/images/e/e3/MATE_mozo_other_default.png

  1. Displaying the results of unchecking the YaST modules in the Administration folder. Note that I am not deleting, only hiding these entries from view.

https://en.opensuse.org/images/2/2a/MATE_mozo_uncheck_YAST_items.png

  1. The result (immediate, does not even require closing mozo) is that the unchecked items disappear from the application menu.

If your mozo doesn’t display same as what I posted,
Then you may need to describe how you installed your system, and if it’s differently than what is in my first post.

HTH,
TSU

From my limited experience with kernel microcode when I was investigating a highly desireable VMware feature that required a specific instructionset,

I found that…

  1. The instructionset must be available by way of a processor API (or at least that’ll be what I’ll call it).
    In my case, that was the case. Initial lots of my CPU manufactured and sold did not have the instruction enabled but a way was provided for the instruction to be inserted.

  2. Someone needs to write the microcode update to utilize or insert the missing instruction.
    In my case, VMware did write the necessary microcode

  3. The CPU manufacturer (Intel in my case) needs to permit the microcode insertion.
    In my case, Intel has never allowed the microcode to be inserted for whatever reason they might have.

At least in my case,
I determined that you need to research the latest published documentation for you CPU regarding any microcode updates, and might even need to inspect documentation for specific instructions.
Everything and everyone (CPU manufacturer, App vendor or author of the microcode) needs to agree that the feature can be enabled before something can happen, and there can be disagreement. So, just because you might read that something might be available, you might have to do deeper research into whether there is any hang-up that prevents actual implementation.

HTH and maybe not that helpful,
TSU