-#ident "$Id$"
/* ----------------------------------------------------------------------- *
*
* Copyright 2000 H. Peter Anvin - All Rights Reserved
return ret;
}
-static ssize_t msr_read(struct file * file, char * buf,
+static ssize_t msr_read(struct file * file, char __user * buf,
size_t count, loff_t *ppos)
{
- u32 *tmp = (u32 *)buf;
+ char __user *tmp = buf;
u32 data[2];
size_t rv;
u32 reg = *ppos;
return err;
if ( copy_to_user(tmp,&data,8) )
return -EFAULT;
- tmp += 2;
+ tmp += 8;
}
- return ((char *)tmp) - buf;
+ return tmp - buf;
}
-static ssize_t msr_write(struct file * file, const char * buf,
+static ssize_t msr_write(struct file * file, const char __user * buf,
size_t count, loff_t *ppos)
{
- const u32 *tmp = (const u32 *)buf;
+ const char __user *tmp = buf;
u32 data[2];
size_t rv;
u32 reg = *ppos;
err = do_wrmsr(cpu, reg, data[0], data[1]);
if ( err )
return err;
- tmp += 2;
+ tmp += 8;
}
- return ((char *)tmp) - buf;
+ return tmp - buf;
}
static int msr_open(struct inode *inode, struct file *file)
int cpu = iminor(file->f_dentry->d_inode);
struct cpuinfo_x86 *c = &(cpu_data)[cpu];
- if (!cpu_online(cpu))
+ if (cpu >= NR_CPUS || !cpu_online(cpu))
return -ENXIO; /* No such CPU */
if ( !cpu_has(c, X86_FEATURE_MSR) )
return -EIO; /* MSR not supported */