Skip to content

Commit

Permalink
x86, microcode: Drop uci->mc check on resume path
Browse files Browse the repository at this point in the history
Remove the uci->mc check on the cpu resume path because the low-level
drivers do that anyway.

More importantly, though, this fixes a contrived and obscure but still
important case. Imagine the following:

* boot machine, no new microcode in /lib/firmware

* a subset of the CPUs is offlined

* in the meantime, user puts new fresh microcode container into
/lib/firmware and reloads it by doing
$ echo 1 > /sys/devices/system/cpu/microcode/reload

* offlined cores come back online and they don't get the newer microcode
applied due to this check.

Later patches take care of the issue on AMD.

While at it, cleanup code around it.

Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Link: http://lkml.kernel.org/r/1344361461-10076-4-git-send-email-bp@amd64.org
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
  • Loading branch information
Borislav Petkov authored and H. Peter Anvin committed Aug 22, 2012
1 parent 4dbf32c commit bb9d3e4
Showing 1 changed file with 5 additions and 11 deletions.
16 changes: 5 additions & 11 deletions arch/x86/kernel/microcode_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,13 +369,10 @@ static void microcode_fini_cpu(int cpu)

static enum ucode_state microcode_resume_cpu(int cpu)
{
struct ucode_cpu_info *uci = ucode_cpu_info + cpu;

if (!uci->mc)
return UCODE_NFOUND;

pr_debug("CPU%d updated upon resume\n", cpu);
apply_microcode_on_target(cpu);

if (apply_microcode_on_target(cpu))
return UCODE_ERROR;

return UCODE_OK;
}
Expand Down Expand Up @@ -404,14 +401,11 @@ static enum ucode_state microcode_init_cpu(int cpu)
static enum ucode_state microcode_update_cpu(int cpu)
{
struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
enum ucode_state ustate;

if (uci->valid)
ustate = microcode_resume_cpu(cpu);
else
ustate = microcode_init_cpu(cpu);
return microcode_resume_cpu(cpu);

return ustate;
return microcode_init_cpu(cpu);
}

static int mc_device_add(struct device *dev, struct subsys_interface *sif)
Expand Down

0 comments on commit bb9d3e4

Please sign in to comment.