diff options
Diffstat (limited to 'arch/x86/kernel/cpuid.c')
| -rw-r--r-- | arch/x86/kernel/cpuid.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 39472dd2323..60c78917190 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c @@ -199,12 +199,14 @@ static int __init cpuid_init(void)  		goto out_chrdev;  	}  	cpuid_class->devnode = cpuid_devnode; +	get_online_cpus();  	for_each_online_cpu(i) {  		err = cpuid_device_create(i);  		if (err != 0)  			goto out_class;  	}  	register_hotcpu_notifier(&cpuid_class_cpu_notifier); +	put_online_cpus();  	err = 0;  	goto out; @@ -214,6 +216,7 @@ out_class:  	for_each_online_cpu(i) {  		cpuid_device_destroy(i);  	} +	put_online_cpus();  	class_destroy(cpuid_class);  out_chrdev:  	__unregister_chrdev(CPUID_MAJOR, 0, NR_CPUS, "cpu/cpuid"); @@ -225,11 +228,13 @@ static void __exit cpuid_exit(void)  {  	int cpu = 0; +	get_online_cpus();  	for_each_online_cpu(cpu)  		cpuid_device_destroy(cpu);  	class_destroy(cpuid_class);  	__unregister_chrdev(CPUID_MAJOR, 0, NR_CPUS, "cpu/cpuid");  	unregister_hotcpu_notifier(&cpuid_class_cpu_notifier); +	put_online_cpus();  }  module_init(cpuid_init);  |