Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[sfrench/cifs-2.6.git] / arch / x86 / kernel / microcode_core.c
index 378e9a8f1bf8b1b338104b822afc74ed18ce0823..e68aae3978694ec5b83bf45058691a00b8a95da4 100644 (file)
@@ -73,7 +73,6 @@
 #include <linux/platform_device.h>
 #include <linux/miscdevice.h>
 #include <linux/capability.h>
-#include <linux/smp_lock.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
@@ -201,7 +200,6 @@ static int do_microcode_update(const void __user *buf, size_t size)
 
 static int microcode_open(struct inode *unused1, struct file *unused2)
 {
-       cycle_kernel_lock();
        return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
 }
 
@@ -393,7 +391,7 @@ static enum ucode_state microcode_update_cpu(int cpu)
        struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
        enum ucode_state ustate;
 
-       if (uci->valid)
+       if (uci->valid && uci->mc)
                ustate = microcode_resume_cpu(cpu);
        else
                ustate = microcode_init_cpu(cpu);
@@ -520,6 +518,9 @@ static int __init microcode_init(void)
                return PTR_ERR(microcode_pdev);
        }
 
+       if (microcode_ops->init)
+               microcode_ops->init(&microcode_pdev->dev);
+
        get_online_cpus();
        mutex_lock(&microcode_mutex);
 
@@ -563,6 +564,9 @@ static void __exit microcode_exit(void)
 
        platform_device_unregister(microcode_pdev);
 
+       if (microcode_ops->fini)
+               microcode_ops->fini();
+
        microcode_ops = NULL;
 
        pr_info("Microcode Update Driver: v" MICROCODE_VERSION " removed.\n");