summaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2011-12-07 16:26:56 (GMT)
committerBorislav Petkov <bp@amd64.org>2011-12-14 11:46:52 (GMT)
commitd733689ad57ec332fb1e392115d83a75f35df1cf (patch)
tree98c4853147c62c7e8880acc6fcc9b405a595c2f6 /arch/x86
parentbe62adb492943ce2525ff19401b389a85006ad15 (diff)
downloadlinux-d733689ad57ec332fb1e392115d83a75f35df1cf.tar.xz
x86, microcode, AMD: Exit early on success
Once we've found and validated the ucode patch for the current CPU, there's no need to iterate over the remaining patches in the binary image. Exit then and save us a bunch of cycles. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/microcode_amd.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c
index 384990d..d80e943 100644
--- a/arch/x86/kernel/microcode_amd.c
+++ b/arch/x86/kernel/microcode_amd.c
@@ -282,11 +282,11 @@ generic_load_microcode(int cpu, const u8 *data, size_t size)
mc_hdr = patch;
new_mc = patch;
new_rev = mc_hdr->patch_id;
- leftover -= mc_size;
- } else {
- ucode_ptr += current_size;
- leftover -= current_size;
+ goto out_ok;
}
+
+ ucode_ptr += current_size;
+ leftover -= current_size;
}
if (!new_mc) {
@@ -294,15 +294,11 @@ generic_load_microcode(int cpu, const u8 *data, size_t size)
goto free_table;
}
- if (!leftover) {
- uci->mc = new_mc;
- state = UCODE_OK;
- pr_debug("CPU%d update ucode (0x%08x -> 0x%08x)\n",
- cpu, uci->cpu_sig.rev, new_rev);
- } else {
- new_mc = NULL;
- state = UCODE_ERROR;
- }
+out_ok:
+ uci->mc = new_mc;
+ state = UCODE_OK;
+ pr_debug("CPU%d update ucode (0x%08x -> 0x%08x)\n",
+ cpu, uci->cpu_sig.rev, new_rev);
free_table:
free_equiv_cpu_table();