diff options
author | Borislav Petkov <borislav.petkov@amd.com> | 2011-12-02 17:16:55 +0100 |
---|---|---|
committer | Borislav Petkov <bp@amd64.org> | 2011-12-14 12:46:50 +0100 |
commit | 96b0ee4588036b6fa7cf38c17a9e40531241e895 (patch) | |
tree | 477c7a343310f21f6e2bb950ee1ee53c775bd809 /arch/x86/kernel/microcode_amd.c | |
parent | f72c1a576565a4927d650218e183ab5053ab8c3a (diff) | |
download | blackbird-op-linux-96b0ee4588036b6fa7cf38c17a9e40531241e895.tar.gz blackbird-op-linux-96b0ee4588036b6fa7cf38c17a9e40531241e895.zip |
x86, microcode, AMD: Add a reusable buffer
Add a simple 4K page which gets allocated on driver init and freed on
driver exit instead of vmalloc'ing small buffers for each ucode patch.
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'arch/x86/kernel/microcode_amd.c')
-rw-r--r-- | arch/x86/kernel/microcode_amd.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c index e8a68c2a4364..9129c6981c5b 100644 --- a/arch/x86/kernel/microcode_amd.c +++ b/arch/x86/kernel/microcode_amd.c @@ -71,6 +71,9 @@ struct microcode_amd { static struct equiv_cpu_entry *equiv_cpu_table; +/* page-sized ucode patch buffer */ +void *patch; + static int collect_cpu_info_amd(int cpu, struct cpu_signature *csig) { struct cpuinfo_x86 *c = &cpu_data(cpu); @@ -351,9 +354,14 @@ static struct microcode_ops microcode_amd_ops = { struct microcode_ops * __init init_amd_microcode(void) { + patch = (void *)get_zeroed_page(GFP_KERNEL); + if (!patch) + return NULL; + return µcode_amd_ops; } void __exit exit_amd_microcode(void) { + free_page((unsigned long)patch); } |