x86, microcode, AMD: Add a reusable buffer
authorBorislav Petkov <borislav.petkov@amd.com>
Fri, 2 Dec 2011 16:16:55 +0000 (17:16 +0100)
committerBorislav Petkov <bp@amd64.org>
Wed, 14 Dec 2011 11:46:50 +0000 (12:46 +0100)
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>
arch/x86/kernel/microcode_amd.c

index e8a68c2a4364b35c2b3277a688e08dd8b9a87475..9129c6981c5b89a8c003b2fc5f90393cd1333969 100644 (file)
@@ -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 &microcode_amd_ops;
 }
 
 void __exit exit_amd_microcode(void)
 {
+       free_page((unsigned long)patch);
 }