diff options
Diffstat (limited to 'arch/x86/kernel/microcode_core.c')
-rw-r--r-- | arch/x86/kernel/microcode_core.c | 10 |
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 | ||
202 | static int microcode_open(struct inode *unused1, struct file *unused2) | 201 | static 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(µcode_pdev->dev); | ||
523 | |||
523 | get_online_cpus(); | 524 | get_online_cpus(); |
524 | mutex_lock(µcode_mutex); | 525 | mutex_lock(µcode_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"); |