Commit f454177f authored by Borislav Petkov's avatar Borislav Petkov Committed by Thomas Gleixner

x86/microcode/AMD: Extend the container struct

Make it into a container descriptor which is being passed around and
stores important info like the matching container and the patch for the
current CPU. Make it static too.

Later patches will use this and thus get rid of a double container
parsing.
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170120202955.4091-7-bp@alien8.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent ef901dc3
...@@ -42,9 +42,13 @@ static struct equiv_cpu_entry *equiv_cpu_table; ...@@ -42,9 +42,13 @@ static struct equiv_cpu_entry *equiv_cpu_table;
/* /*
* This points to the current valid container of microcode patches which we will * This points to the current valid container of microcode patches which we will
* save from the initrd/builtin before jettisoning its contents. * save from the initrd/builtin before jettisoning its contents. @mc is the
* microcode patch we found to match.
*/ */
struct container { static struct cont_desc {
struct microcode_amd *mc;
u32 psize;
u16 eq_id;
u8 *data; u8 *data;
size_t size; size_t size;
} cont; } cont;
...@@ -113,9 +117,9 @@ static u16 find_equiv_id(struct equiv_cpu_entry *equiv_table, u32 sig) ...@@ -113,9 +117,9 @@ static u16 find_equiv_id(struct equiv_cpu_entry *equiv_table, u32 sig)
* table or 0 if none found. * table or 0 if none found.
*/ */
static u16 static u16
find_proper_container(u8 *ucode, size_t size, struct container *ret_cont) find_proper_container(u8 *ucode, size_t size, struct cont_desc *desc)
{ {
struct container ret = { NULL, 0 }; struct cont_desc ret = { 0 };
u32 eax, ebx, ecx, edx; u32 eax, ebx, ecx, edx;
struct equiv_cpu_entry *eq; struct equiv_cpu_entry *eq;
int offset, left; int offset, left;
...@@ -158,7 +162,7 @@ find_proper_container(u8 *ucode, size_t size, struct container *ret_cont) ...@@ -158,7 +162,7 @@ find_proper_container(u8 *ucode, size_t size, struct container *ret_cont)
*/ */
left = ret.size - offset; left = ret.size - offset;
*ret_cont = ret; *desc = ret;
return eq_id; return eq_id;
} }
...@@ -213,11 +217,11 @@ static int __apply_microcode_amd(struct microcode_amd *mc) ...@@ -213,11 +217,11 @@ static int __apply_microcode_amd(struct microcode_amd *mc)
* Returns true if container found (sets @ret_cont), false otherwise. * Returns true if container found (sets @ret_cont), false otherwise.
*/ */
static bool apply_microcode_early_amd(void *ucode, size_t size, bool save_patch, static bool apply_microcode_early_amd(void *ucode, size_t size, bool save_patch,
struct container *ret_cont) struct cont_desc *desc)
{ {
u8 (*patch)[PATCH_MAX_SIZE]; u8 (*patch)[PATCH_MAX_SIZE];
u32 rev, *header, *new_rev; u32 rev, *header, *new_rev;
struct container ret; struct cont_desc ret;
int offset, left; int offset, left;
u16 eq_id = 0; u16 eq_id = 0;
u8 *data; u8 *data;
...@@ -270,8 +274,8 @@ static bool apply_microcode_early_amd(void *ucode, size_t size, bool save_patch, ...@@ -270,8 +274,8 @@ static bool apply_microcode_early_amd(void *ucode, size_t size, bool save_patch,
left -= offset; left -= offset;
} }
if (ret_cont) if (desc)
*ret_cont = ret; *desc = ret;
return true; return true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment