public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] i8k: Push the BKL down into the driver ioctl method
@ 2008-05-22 21:32 Alan Cox
  0 siblings, 0 replies; only message in thread
From: Alan Cox @ 2008-05-22 21:32 UTC (permalink / raw)
  To: dz, linux-kernel

Signed-off-by: Alan Cox <alan@redhat.com>

diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
index b60d425..1c22cff 100644
--- a/drivers/char/i8k.c
+++ b/drivers/char/i8k.c
@@ -23,8 +23,9 @@
 #include <linux/seq_file.h>
 #include <linux/dmi.h>
 #include <linux/capability.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
+#include <linux/smp_lock.h>
+#include <linux/uaccess.h>
+#include <linux/io.h>
 
 #include <linux/i8k.h>
 
@@ -82,8 +83,7 @@ module_param(fan_mult, int, 0);
 MODULE_PARM_DESC(fan_mult, "Factor to multiply fan speed with");
 
 static int i8k_open_fs(struct inode *inode, struct file *file);
-static int i8k_ioctl(struct inode *, struct file *, unsigned int,
-		     unsigned long);
+static long i8k_ioctl(struct file *, unsigned int, unsigned long);
 
 static const struct file_operations i8k_fops = {
 	.owner		= THIS_MODULE,
@@ -91,7 +91,7 @@ static const struct file_operations i8k_fops = {
 	.read		= seq_read,
 	.llseek		= seq_lseek,
 	.release	= single_release,
-	.ioctl		= i8k_ioctl,
+	.unlocked_ioctl	= i8k_ioctl,
 };
 
 struct smm_regs {
@@ -307,8 +307,7 @@ static int i8k_get_dell_signature(int req_fn)
 	return regs.eax == 1145651527 && regs.edx == 1145392204 ? 0 : -1;
 }
 
-static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
-		     unsigned long arg)
+static long i8k_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
 {
 	int val = 0;
 	int speed;
@@ -318,6 +317,8 @@ static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
 	if (!argp)
 		return -EINVAL;
 
+	lock_kernel();
+
 	switch (cmd) {
 	case I8K_BIOS_VERSION:
 		val = i8k_get_bios_version();
@@ -342,34 +343,33 @@ static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
 
 	case I8K_GET_SPEED:
 		if (copy_from_user(&val, argp, sizeof(int)))
-			return -EFAULT;
-
-		val = i8k_get_fan_speed(val);
+			val = -EFAULT;
+		else
+			val = i8k_get_fan_speed(val);
 		break;
 
 	case I8K_GET_FAN:
 		if (copy_from_user(&val, argp, sizeof(int)))
-			return -EFAULT;
-
-		val = i8k_get_fan_status(val);
+			val = -EFAULT;
+		else
+			val = i8k_get_fan_status(val);
 		break;
 
 	case I8K_SET_FAN:
 		if (restricted && !capable(CAP_SYS_ADMIN))
-			return -EPERM;
-
-		if (copy_from_user(&val, argp, sizeof(int)))
-			return -EFAULT;
-
-		if (copy_from_user(&speed, argp + 1, sizeof(int)))
-			return -EFAULT;
-
-		val = i8k_set_fan(val, speed);
+			val = -EPERM;
+		else if (copy_from_user(&val, argp, sizeof(int)))
+			val = -EFAULT;
+		else if (copy_from_user(&speed, argp + 1, sizeof(int)))
+			val = -EFAULT;
+		else
+			val = i8k_set_fan(val, speed);
 		break;
 
 	default:
-		return -EINVAL;
+		val = -ENOTTY;
 	}
+	unlock_kernel();
 
 	if (val < 0)
 		return val;

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-05-22 21:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-22 21:32 [PATCH] i8k: Push the BKL down into the driver ioctl method Alan Cox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox