aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorBorislav Petkov <borislav.petkov@amd.com>2011-12-02 10:50:04 -0500
committerBorislav Petkov <bp@amd64.org>2011-12-14 06:46:47 -0500
commitf72c1a576565a4927d650218e183ab5053ab8c3a (patch)
tree5be7538c92d77deae68e867a9a8a0f17e3e75bed /arch/x86
parentdc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50 (diff)
x86, microcode, AMD: Add a vendor-specific exit function
This will be used to do cleanup work before the driver exits. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/include/asm/microcode.h2
-rw-r--r--arch/x86/kernel/microcode_amd.c4
-rw-r--r--arch/x86/kernel/microcode_core.c5
3 files changed, 11 insertions, 0 deletions
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
index 24215072d0e1..4ebe157bf73d 100644
--- a/arch/x86/include/asm/microcode.h
+++ b/arch/x86/include/asm/microcode.h
@@ -48,6 +48,7 @@ static inline struct microcode_ops * __init init_intel_microcode(void)
48 48
49#ifdef CONFIG_MICROCODE_AMD 49#ifdef CONFIG_MICROCODE_AMD
50extern struct microcode_ops * __init init_amd_microcode(void); 50extern struct microcode_ops * __init init_amd_microcode(void);
51extern void __exit exit_amd_microcode(void);
51 52
52static inline void get_ucode_data(void *to, const u8 *from, size_t n) 53static inline void get_ucode_data(void *to, const u8 *from, size_t n)
53{ 54{
@@ -59,6 +60,7 @@ static inline struct microcode_ops * __init init_amd_microcode(void)
59{ 60{
60 return NULL; 61 return NULL;
61} 62}
63static inline void __exit exit_amd_microcode(void) {}
62#endif 64#endif
63 65
64#endif /* _ASM_X86_MICROCODE_H */ 66#endif /* _ASM_X86_MICROCODE_H */
diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c
index d494799aafcd..e8a68c2a4364 100644
--- a/arch/x86/kernel/microcode_amd.c
+++ b/arch/x86/kernel/microcode_amd.c
@@ -353,3 +353,7 @@ struct microcode_ops * __init init_amd_microcode(void)
353{ 353{
354 return &microcode_amd_ops; 354 return &microcode_amd_ops;
355} 355}
356
357void __exit exit_amd_microcode(void)
358{
359}
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
index 9d46f5e43b51..9302e2d0eb4b 100644
--- a/arch/x86/kernel/microcode_core.c
+++ b/arch/x86/kernel/microcode_core.c
@@ -563,6 +563,8 @@ module_init(microcode_init);
563 563
564static void __exit microcode_exit(void) 564static void __exit microcode_exit(void)
565{ 565{
566 struct cpuinfo_x86 *c = &cpu_data(0);
567
566 microcode_dev_exit(); 568 microcode_dev_exit();
567 569
568 unregister_hotcpu_notifier(&mc_cpu_notifier); 570 unregister_hotcpu_notifier(&mc_cpu_notifier);
@@ -580,6 +582,9 @@ static void __exit microcode_exit(void)
580 582
581 microcode_ops = NULL; 583 microcode_ops = NULL;
582 584
585 if (c->x86_vendor == X86_VENDOR_AMD)
586 exit_amd_microcode();
587
583 pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n"); 588 pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n");
584} 589}
585module_exit(microcode_exit); 590module_exit(microcode_exit);