diff options
| author | David S. Miller <davem@davemloft.net> | 2011-12-06 21:10:05 -0500 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-12-06 21:10:05 -0500 | 
| commit | 959327c7842e8621e28b89acea7d57ff02b60972 (patch) | |
| tree | b00de195fa401186228796abdcd16812862fbf4d /arch/x86/kernel/microcode_core.c | |
| parent | f84ea779c25dabc90956f1c329e5e5c501ea96cc (diff) | |
| parent | b835c0f47f725d864bf2545f10c733b754bb6d51 (diff) | |
| download | olio-linux-3.10-959327c7842e8621e28b89acea7d57ff02b60972.tar.xz olio-linux-3.10-959327c7842e8621e28b89acea7d57ff02b60972.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'arch/x86/kernel/microcode_core.c')
| -rw-r--r-- | arch/x86/kernel/microcode_core.c | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c index f2d2a664e79..9d46f5e43b5 100644 --- a/arch/x86/kernel/microcode_core.c +++ b/arch/x86/kernel/microcode_core.c @@ -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);  } @@ -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); @@ -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); @@ -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);  |