linux-aws fails to late load microcode, works with generic
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux-aws (Ubuntu) |
Expired
|
Undecided
|
Unassigned |
Bug Description
[Impact]
* Late loading of intel microcode doesn't seem to work on aws.
[Test Case]
* Boot Focal on AWS metal instance
* Install intel-microcode package
* Disable early microcode loading:
sudo rm /usr/share/
* Update initrd
sudo update-initramfs -u
* Observe that late loading (due to /usr/lib/
I.e. expected to see something like this:
$ journalctl -b | grep microcode
Feb 14 11:08:38 ottawa kernel: microcode: sig=0x506e3, pf=0x20, revision=0xc6
Feb 14 11:08:38 ottawa kernel: microcode: Microcode Update Driver: v2.2.
Feb 14 11:08:42 ottawa kernel: microcode: updated to revision 0xd6, date = 2019-10-03
Feb 14 11:08:42 ottawa kernel: x86/CPU: CPU features have changed after loading microcode, but might not take effect.
Feb 14 11:08:42 ottawa kernel: microcode: Reload completed, microcode revision: 0xd6
instead I see something like this:
Feb 14 11:08:38 ottawa kernel: microcode: sig=0x506e3, pf=0x20, revision=0xc6
Feb 14 11:08:38 ottawa kernel: microcode: Microcode Update Driver: v2.2.
(no updated to revivsion .... message)
[Regression Potential]
* Late loading is new, as the current default is to load microcode early from initrd. It will only change behaviour on initrd-less bionic-minimal images, and any image types on later releases, but only when booted on the .metal instances.
Hello Dimitri,
The source of this is that the linux-aws (and some other cloud-specific) kernels do not have CONFIG_ MICROCODE_ OLD_INTERFACE enabled, while they are enabled in the generic kernel configs.
For consideration, this is the kernel config documentation for this option:
config MICROCODE_ OLD_INTERFACE x86/microcode. rst
bool "Ancient loading interface (DEPRECATED)"
default n
depends on MICROCODE
---help---
DO NOT USE THIS! This is the ancient /dev/cpu/microcode interface
which was used by userspace tools like iucode_tool and microcode.ctl.
It is inadequate because it runs too late to be able to properly
load microcode on a machine and it needs special tools. Instead, you
should've switched to the early loading method with the initrd or
builtin microcode by now: Documentation/
I'm going to mark this issue public. Thanks.