diff options
Diffstat (limited to 'arch/x86/kernel/msr.c')
| -rw-r--r-- | arch/x86/kernel/msr.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index 88458faea2f..c9603ac80de 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c @@ -46,7 +46,7 @@ static struct class *msr_class;  static loff_t msr_seek(struct file *file, loff_t offset, int orig)  {  	loff_t ret; -	struct inode *inode = file->f_mapping->host; +	struct inode *inode = file_inode(file);  	mutex_lock(&inode->i_mutex);  	switch (orig) { @@ -259,14 +259,15 @@ static int __init msr_init(void)  		goto out_chrdev;  	}  	msr_class->devnode = msr_devnode; -	get_online_cpus(); + +	cpu_notifier_register_begin();  	for_each_online_cpu(i) {  		err = msr_device_create(i);  		if (err != 0)  			goto out_class;  	} -	register_hotcpu_notifier(&msr_class_cpu_notifier); -	put_online_cpus(); +	__register_hotcpu_notifier(&msr_class_cpu_notifier); +	cpu_notifier_register_done();  	err = 0;  	goto out; @@ -275,7 +276,7 @@ out_class:  	i = 0;  	for_each_online_cpu(i)  		msr_device_destroy(i); -	put_online_cpus(); +	cpu_notifier_register_done();  	class_destroy(msr_class);  out_chrdev:  	__unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr"); @@ -286,13 +287,14 @@ out:  static void __exit msr_exit(void)  {  	int cpu = 0; -	get_online_cpus(); + +	cpu_notifier_register_begin();  	for_each_online_cpu(cpu)  		msr_device_destroy(cpu);  	class_destroy(msr_class);  	__unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr"); -	unregister_hotcpu_notifier(&msr_class_cpu_notifier); -	put_online_cpus(); +	__unregister_hotcpu_notifier(&msr_class_cpu_notifier); +	cpu_notifier_register_done();  }  module_init(msr_init);  | 
