]> www.infradead.org Git - users/jedix/linux-maple.git/commit
x86/microcode/AMD: Split load_microcode_amd()
authorBorislav Petkov (AMD) <bp@alien8.de>
Mon, 21 Oct 2024 08:38:21 +0000 (10:38 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 22 Oct 2024 14:48:00 +0000 (16:48 +0200)
commit1d81d85d1a19e50d5237dc67d6b825c34ae13de8
treed21ff9377db4df6e735b0d812aacebdecbd34f14
parentd1744a4c975b1acbe8b498356d28afbc46c88428
x86/microcode/AMD: Split load_microcode_amd()

This function should've been split a long time ago because it is used in
two paths:

1) On the late loading path, when the microcode is loaded through the
   request_firmware interface

2) In the save_microcode_in_initrd() path which collects all the
   microcode patches which are relevant for the current system before
   the initrd with the microcode container has been jettisoned.

   In that path, it is not really necessary to iterate over the nodes on
   a system and match a patch however it didn't cause any trouble so it
   was left for a later cleanup

However, that later cleanup was expedited by the fact that Jens was
enabling "Use L3 as a NUMA node" in the BIOS setting in his machine and
so this causes the NUMA CPU masks used in cpumask_of_node() to be
generated *after* 2) above happened on the first node. Which means, all
those masks were funky, wrong, uninitialized and whatnot, leading to
explosions when dereffing c->microcode in load_microcode_amd().

So split that function and do only the necessary work needed at each
stage.

Fixes: 94838d230a6c ("x86/microcode/AMD: Use the family,model,stepping encoded in the patch ID")
Reported-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/91194406-3fdf-4e38-9838-d334af538f74@kernel.dk
arch/x86/kernel/cpu/microcode/amd.c