aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/microcode_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/microcode_core.c')
-rw-r--r--arch/x86/kernel/microcode_core.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
index 378e9a8f1bf8..e68aae397869 100644
--- a/arch/x86/kernel/microcode_core.c
+++ b/arch/x86/kernel/microcode_core.c
@@ -73,7 +73,6 @@
73#include <linux/platform_device.h> 73#include <linux/platform_device.h>
74#include <linux/miscdevice.h> 74#include <linux/miscdevice.h>
75#include <linux/capability.h> 75#include <linux/capability.h>
76#include <linux/smp_lock.h>
77#include <linux/kernel.h> 76#include <linux/kernel.h>
78#include <linux/module.h> 77#include <linux/module.h>
79#include <linux/mutex.h> 78#include <linux/mutex.h>
@@ -201,7 +200,6 @@ static int do_microcode_update(const void __user *buf, size_t size)
201 200
202static int microcode_open(struct inode *unused1, struct file *unused2) 201static int microcode_open(struct inode *unused1, struct file *unused2)
203{ 202{
204 cycle_kernel_lock();
205 return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; 203 return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
206} 204}
207 205
@@ -393,7 +391,7 @@ static enum ucode_state microcode_update_cpu(int cpu)
393 struct ucode_cpu_info *uci = ucode_cpu_info + cpu; 391 struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
394 enum ucode_state ustate; 392 enum ucode_state ustate;
395 393
396 if (uci->valid) 394 if (uci->valid && uci->mc)
397 ustate = microcode_resume_cpu(cpu); 395 ustate = microcode_resume_cpu(cpu);
398 else 396 else
399 ustate = microcode_init_cpu(cpu); 397 ustate = microcode_init_cpu(cpu);
@@ -520,6 +518,9 @@ static int __init microcode_init(void)
520 return PTR_ERR(microcode_pdev); 518 return PTR_ERR(microcode_pdev);
521 } 519 }
522 520
521 if (microcode_ops->init)
522 microcode_ops->init(&microcode_pdev->dev);
523
523 get_online_cpus(); 524 get_online_cpus();
524 mutex_lock(&microcode_mutex); 525 mutex_lock(&microcode_mutex);
525 526
@@ -563,6 +564,9 @@ static void __exit microcode_exit(void)
563 564
564 platform_device_unregister(microcode_pdev); 565 platform_device_unregister(microcode_pdev);
565 566
567 if (microcode_ops->fini)
568 microcode_ops->fini();
569
566 microcode_ops = NULL; 570 microcode_ops = NULL;
567 571
568 pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n"); 572 pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n");