diff options
Diffstat (limited to 'arch/x86/kernel/msr.c')
-rw-r--r-- | arch/x86/kernel/msr.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index 6a3cefc7dda1..4bd93c9b2b27 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c | |||
@@ -172,23 +172,18 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg) | |||
172 | 172 | ||
173 | static int msr_open(struct inode *inode, struct file *file) | 173 | static int msr_open(struct inode *inode, struct file *file) |
174 | { | 174 | { |
175 | unsigned int cpu = iminor(file->f_path.dentry->d_inode); | 175 | unsigned int cpu; |
176 | struct cpuinfo_x86 *c = &cpu_data(cpu); | 176 | struct cpuinfo_x86 *c; |
177 | int ret = 0; | ||
178 | 177 | ||
179 | lock_kernel(); | ||
180 | cpu = iminor(file->f_path.dentry->d_inode); | 178 | cpu = iminor(file->f_path.dentry->d_inode); |
179 | if (cpu >= nr_cpu_ids || !cpu_online(cpu)) | ||
180 | return -ENXIO; /* No such CPU */ | ||
181 | 181 | ||
182 | if (cpu >= nr_cpu_ids || !cpu_online(cpu)) { | ||
183 | ret = -ENXIO; /* No such CPU */ | ||
184 | goto out; | ||
185 | } | ||
186 | c = &cpu_data(cpu); | 182 | c = &cpu_data(cpu); |
187 | if (!cpu_has(c, X86_FEATURE_MSR)) | 183 | if (!cpu_has(c, X86_FEATURE_MSR)) |
188 | ret = -EIO; /* MSR not supported */ | 184 | return -EIO; /* MSR not supported */ |
189 | out: | 185 | |
190 | unlock_kernel(); | 186 | return 0; |
191 | return ret; | ||
192 | } | 187 | } |
193 | 188 | ||
194 | /* | 189 | /* |
@@ -251,7 +246,7 @@ static int __init msr_init(void) | |||
251 | int i, err = 0; | 246 | int i, err = 0; |
252 | i = 0; | 247 | i = 0; |
253 | 248 | ||
254 | if (register_chrdev(MSR_MAJOR, "cpu/msr", &msr_fops)) { | 249 | if (__register_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr", &msr_fops)) { |
255 | printk(KERN_ERR "msr: unable to get major %d for msr\n", | 250 | printk(KERN_ERR "msr: unable to get major %d for msr\n", |
256 | MSR_MAJOR); | 251 | MSR_MAJOR); |
257 | err = -EBUSY; | 252 | err = -EBUSY; |
@@ -279,7 +274,7 @@ out_class: | |||
279 | msr_device_destroy(i); | 274 | msr_device_destroy(i); |
280 | class_destroy(msr_class); | 275 | class_destroy(msr_class); |
281 | out_chrdev: | 276 | out_chrdev: |
282 | unregister_chrdev(MSR_MAJOR, "cpu/msr"); | 277 | __unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr"); |
283 | out: | 278 | out: |
284 | return err; | 279 | return err; |
285 | } | 280 | } |