Loading arch/x86/include/asm/msr.h +8 −1 Original line number Diff line number Diff line Loading @@ -169,7 +169,14 @@ static inline int wrmsr_safe(unsigned msr, unsigned low, unsigned high) return native_write_msr_safe(msr, low, high); } /* rdmsr with exception handling */ /* * rdmsr with exception handling. * * Please note that the exception handling works only after we've * switched to the "smart" #GP handler in trap_init() which knows about * exception tables - using this macro earlier than that causes machine * hangs on boxes which do not implement the @msr in the first argument. */ #define rdmsr_safe(msr, p1, p2) \ ({ \ int __err; \ Loading arch/x86/kernel/microcode_core.c +19 −9 Original line number Diff line number Diff line Loading @@ -256,7 +256,7 @@ static int __init microcode_dev_init(void) return 0; } static void microcode_dev_exit(void) static void __exit microcode_dev_exit(void) { misc_deregister(µcode_dev); } Loading Loading @@ -519,10 +519,8 @@ static int __init microcode_init(void) microcode_pdev = platform_device_register_simple("microcode", -1, NULL, 0); if (IS_ERR(microcode_pdev)) { microcode_dev_exit(); if (IS_ERR(microcode_pdev)) return PTR_ERR(microcode_pdev); } get_online_cpus(); mutex_lock(µcode_mutex); Loading @@ -532,14 +530,12 @@ static int __init microcode_init(void) mutex_unlock(µcode_mutex); put_online_cpus(); if (error) { platform_device_unregister(microcode_pdev); return error; } if (error) goto out_pdev; error = microcode_dev_init(); if (error) return error; goto out_sysdev_driver; register_syscore_ops(&mc_syscore_ops); register_hotcpu_notifier(&mc_cpu_notifier); Loading @@ -548,6 +544,20 @@ static int __init microcode_init(void) " <tigran@aivazian.fsnet.co.uk>, Peter Oruba\n"); return 0; out_sysdev_driver: get_online_cpus(); mutex_lock(µcode_mutex); sysdev_driver_unregister(&cpu_sysdev_class, &mc_sysdev_driver); mutex_unlock(µcode_mutex); put_online_cpus(); out_pdev: platform_device_unregister(microcode_pdev); return error; } module_init(microcode_init); Loading Loading
arch/x86/include/asm/msr.h +8 −1 Original line number Diff line number Diff line Loading @@ -169,7 +169,14 @@ static inline int wrmsr_safe(unsigned msr, unsigned low, unsigned high) return native_write_msr_safe(msr, low, high); } /* rdmsr with exception handling */ /* * rdmsr with exception handling. * * Please note that the exception handling works only after we've * switched to the "smart" #GP handler in trap_init() which knows about * exception tables - using this macro earlier than that causes machine * hangs on boxes which do not implement the @msr in the first argument. */ #define rdmsr_safe(msr, p1, p2) \ ({ \ int __err; \ Loading
arch/x86/kernel/microcode_core.c +19 −9 Original line number Diff line number Diff line Loading @@ -256,7 +256,7 @@ static int __init microcode_dev_init(void) return 0; } static void microcode_dev_exit(void) static void __exit microcode_dev_exit(void) { misc_deregister(µcode_dev); } Loading Loading @@ -519,10 +519,8 @@ static int __init microcode_init(void) microcode_pdev = platform_device_register_simple("microcode", -1, NULL, 0); if (IS_ERR(microcode_pdev)) { microcode_dev_exit(); if (IS_ERR(microcode_pdev)) return PTR_ERR(microcode_pdev); } get_online_cpus(); mutex_lock(µcode_mutex); Loading @@ -532,14 +530,12 @@ static int __init microcode_init(void) mutex_unlock(µcode_mutex); put_online_cpus(); if (error) { platform_device_unregister(microcode_pdev); return error; } if (error) goto out_pdev; error = microcode_dev_init(); if (error) return error; goto out_sysdev_driver; register_syscore_ops(&mc_syscore_ops); register_hotcpu_notifier(&mc_cpu_notifier); Loading @@ -548,6 +544,20 @@ static int __init microcode_init(void) " <tigran@aivazian.fsnet.co.uk>, Peter Oruba\n"); return 0; out_sysdev_driver: get_online_cpus(); mutex_lock(µcode_mutex); sysdev_driver_unregister(&cpu_sysdev_class, &mc_sysdev_driver); mutex_unlock(µcode_mutex); put_online_cpus(); out_pdev: platform_device_unregister(microcode_pdev); return error; } module_init(microcode_init); Loading