mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +00:00
x86: cdev lock_kernel() pushdown
Push the cdev lock_kernel() call down into the x86 msr and cpuid drivers. Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
1fa984b583
commit
5119e92efc
2 changed files with 28 additions and 11 deletions
|
@ -33,6 +33,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/smp_lock.h>
|
||||
|
@ -107,15 +108,23 @@ static ssize_t cpuid_read(struct file *file, char __user *buf,
|
|||
|
||||
static int cpuid_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
unsigned int cpu = iminor(file->f_path.dentry->d_inode);
|
||||
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
||||
unsigned int cpu;
|
||||
struct cpuinfo_x86 *c;
|
||||
int ret = 0;
|
||||
|
||||
lock_kernel();
|
||||
|
||||
if (cpu >= NR_CPUS || !cpu_online(cpu))
|
||||
return -ENXIO; /* No such CPU */
|
||||
cpu = iminor(file->f_path.dentry->d_inode);
|
||||
if (cpu >= NR_CPUS || !cpu_online(cpu)) {
|
||||
ret = -ENXIO; /* No such CPU */
|
||||
goto out;
|
||||
}
|
||||
c = &cpu_data(cpu);
|
||||
if (c->cpuid_level < 0)
|
||||
return -EIO; /* CPUID not supported */
|
||||
|
||||
return 0;
|
||||
ret = -EIO; /* CPUID not supported */
|
||||
out:
|
||||
unlock_kernel();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -117,12 +117,20 @@ static int msr_open(struct inode *inode, struct file *file)
|
|||
{
|
||||
unsigned int cpu = iminor(file->f_path.dentry->d_inode);
|
||||
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
||||
int ret = 0;
|
||||
|
||||
if (cpu >= NR_CPUS || !cpu_online(cpu))
|
||||
return -ENXIO; /* No such CPU */
|
||||
lock_kernel();
|
||||
cpu = iminor(file->f_path.dentry->d_inode);
|
||||
|
||||
if (cpu >= NR_CPUS || !cpu_online(cpu)) {
|
||||
ret = -ENXIO; /* No such CPU */
|
||||
goto out;
|
||||
}
|
||||
c = &cpu_data(cpu);
|
||||
if (!cpu_has(c, X86_FEATURE_MSR))
|
||||
return -EIO; /* MSR not supported */
|
||||
|
||||
ret = -EIO; /* MSR not supported */
|
||||
out:
|
||||
unlock_kernel();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue