2014-07-18 20:56:35

by Conrad Kostecki

[permalink] [raw]
Subject: Early microcode not being loaded

Hi!
I'am trying to use the feature of loading early an intel microcode.
According to the documentation (early-microcode.txt) that should be possible.

I am currently using my own initrd, so I've created a second one, as the docs specified and merged it with my own.

Galactica linux # file /tmp/ucode.cpio
/tmp/ucode.cpio: ASCII cpio archive (SVR4 with no CRC)

Galactica linux # file /tmp/my_own_initrd.cpio
/tmp/my_own_initrd.cpio: ASCII cpio archive (SVR4 with no CRC)

Galactica linux # cpio -itv < /tmp/ucode.cpio
drwxr-xr-x 3 root root 0 Jul 18 17:01 .
drwxr-xr-x 3 root root 0 Jul 18 17:01 kernel
drwxr-xr-x 3 root root 0 Jul 18 17:01 kernel/x86
drwxr-xr-x 2 root root 0 Jul 18 17:01 kernel/x86/microcode
-rw-r--r-- 1 root root 1857432 Jul 18 17:01 kernel/x86/microcode/GenuineIntel.bin

Galactica tmp # cpio -itv < /tmp/my_own_initrd.cpio
drwxr-xr-x 11 root root 0 Jul 18 22:33 .
drwxr-xr-x 3 root root 0 Jul 18 22:33 mnt
drwxr-xr-x 2 root root 0 Jul 18 22:33 mnt/root
drwxr-xr-x 2 root root 0 Jul 18 22:33 lib64
drwxr-xr-x 2 root root 0 Jul 18 22:33 etc
drwxr-xr-x 2 root root 0 Jul 18 22:33 sys
drwxr-xr-x 2 root root 0 Jul 18 22:33 bin
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/ash -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/cat -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/loadkmap -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/cut -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/setfont -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/kbd_mode -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/echo -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/umount -> /bin/busybox
-rwxr-xr-x 1 root root 2638208 Jul 18 22:33 bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/mount -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/mdev -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/sleep -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 bin/printf -> /bin/busybox
drwxr-xr-x 3 root root 0 Jul 18 22:33 usr
drwxr-xr-x 2 root root 0 Jul 18 22:33 usr/bin
lrwxrwxrwx 1 root root 12 Jul 18 22:33 usr/bin/setfont -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 usr/bin/kbd_mode -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 usr/bin/printf -> /bin/busybox
drwxr-xr-x 3 root root 0 Jul 18 22:33 dev
crw-r--r-- 1 root root 5, 1 Jul 18 22:33 dev/console
crw-r--r-- 1 root root 4, 64 Jul 18 22:33 dev/ttyS0
crw-r--r-- 1 root root 1, 3 Jul 18 22:33 dev/null
crw-r--r-- 1 root root 1, 5 Jul 18 22:33 dev/zero
drwxr-xr-x 2 root root 0 Jul 18 22:33 proc
-rwxr-xr-x 1 root root 5707 Jul 18 22:33 init
lrwxrwxrwx 1 root root 5 Jul 18 22:33 lib -> lib64
drwxr-xr-x 2 root root 0 Jul 18 22:33 sbin
lrwxrwxrwx 1 root root 12 Jul 18 22:33 sbin/loadkmap -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 sbin/switch_root -> /bin/busybox
lrwxrwxrwx 1 root root 12 Jul 18 22:33 sbin/mdev -> /bin/busybox
5174 blocks

Then I merged them, as the docs say:
cat /tmp/ucode.cpio /tmp/my_own_initrd.cpio > /boot/initramfs-3.15.5.img

Booting works fine with this combined initrd, but there is no new microcode applied.

[ 1.058641] microcode: CPU0 sig=0x20661, pf=0x2, revision=0x104
[ 1.063259] microcode: CPU1 sig=0x20661, pf=0x2, revision=0x104
[ 1.068011] microcode: Microcode Update Driver: v2.00 <[email protected]>, Peter Oruba

It's only applied much later, when my microcode_ctl runs as a service.

[ 15.764517] microcode: CPU0 sig=0x20661, pf=0x2, revision=0x104
[ 15.764979] microcode: CPU0 updated to revision 0x105, date = 2011-07-18
[ 15.765970] microcode: CPU1 sig=0x20661, pf=0x2, revision=0x104
[ 15.766430] microcode: CPU1 updated to revision 0x105, date = 2011-07-18

Where is the problem? Why is the microcode not being loaded early?

Cheers
Conrad


2014-07-18 21:24:37

by Borislav Petkov

[permalink] [raw]
Subject: Re: Early microcode not being loaded

On Fri, Jul 18, 2014 at 08:40:42PM +0000, Conrad Kostecki wrote:
> Where is the problem? Why is the microcode not being loaded early?

CONFIG_MICROCODE_INTEL_EARLY=y set in .config?

You can also try with a recent distro kernel and initrd which has
microcode in it to rule out you're doing something wrong when generating
the initrd.

HTH.

--
Regards/Gruss,
Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

2014-07-18 21:49:13

by Conrad Kostecki

[permalink] [raw]
Subject: AW: Early microcode not being loaded

> On Fri, Jul 18, 2014 at 08:40:42PM +0000, Conrad Kostecki wrote:
> > Where is the problem? Why is the microcode not being loaded early?
>
> CONFIG_MICROCODE_INTEL_EARLY=y set in .config?

Yes!

Galactica tmp # grep -i microcode /boot/config-3.15.5
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
# CONFIG_MICROCODE_AMD is not set
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_MICROCODE_INTEL_EARLY=y
# CONFIG_MICROCODE_AMD_EARLY is not set
CONFIG_MICROCODE_EARLY=y

Cheers
Conrad
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?