Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e8d95d9 authored by Alan Cox's avatar Alan Cox Committed by Linus Torvalds
Browse files

tosh: Use non bkl ioctl



We wrap the smm calls and other bits with the BKL push down as a
precaution but they can probably go

Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5d9d6e44
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -68,7 +68,7 @@
#include <linux/stat.h>
#include <linux/stat.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/seq_file.h>

#include <linux/smp_lock.h>
#include <linux/toshiba.h>
#include <linux/toshiba.h>


#define TOSH_MINOR_DEV 181
#define TOSH_MINOR_DEV 181
@@ -88,13 +88,13 @@ static int tosh_date;
static int tosh_sci;
static int tosh_sci;
static int tosh_fan;
static int tosh_fan;


static int tosh_ioctl(struct inode *, struct file *, unsigned int,
static long tosh_ioctl(struct file *, unsigned int,
	unsigned long);
	unsigned long);




static const struct file_operations tosh_fops = {
static const struct file_operations tosh_fops = {
	.owner		= THIS_MODULE,
	.owner		= THIS_MODULE,
	.ioctl		= tosh_ioctl,
	.unlocked_ioctl	= tosh_ioctl,
};
};


static struct miscdevice tosh_device = {
static struct miscdevice tosh_device = {
@@ -252,8 +252,7 @@ int tosh_smm(SMMRegisters *regs)
EXPORT_SYMBOL(tosh_smm);
EXPORT_SYMBOL(tosh_smm);




static int tosh_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
static long tosh_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
	unsigned long arg)
{
{
	SMMRegisters regs;
	SMMRegisters regs;
	SMMRegisters __user *argp = (SMMRegisters __user *)arg;
	SMMRegisters __user *argp = (SMMRegisters __user *)arg;
@@ -275,13 +274,16 @@ static int tosh_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
				return -EINVAL;
				return -EINVAL;


			/* do we need to emulate the fan ? */
			/* do we need to emulate the fan ? */
			lock_kernel();
			if (tosh_fan==1) {
			if (tosh_fan==1) {
				if (((ax==0xf300) || (ax==0xf400)) && (bx==0x0004)) {
				if (((ax==0xf300) || (ax==0xf400)) && (bx==0x0004)) {
					err = tosh_emulate_fan(&regs);
					err = tosh_emulate_fan(&regs);
					unlock_kernel();
					break;
					break;
				}
				}
			}
			}
			err = tosh_smm(&regs);
			err = tosh_smm(&regs);
			unlock_kernel();
			break;
			break;
		default:
		default:
			return -EINVAL;
			return -EINVAL;