* [PATCH] dtlk: Push down the BKL
@ 2008-05-22 20:36 Alan Cox
0 siblings, 0 replies; only message in thread
From: Alan Cox @ 2008-05-22 20:36 UTC (permalink / raw)
To: jrv, linux-kernel
This is pretty close to eliminating it but needs someone to take the
final steps
Signed-off-by: Alan Cox <alan@redhat.com>
diff --git a/drivers/char/dtlk.c b/drivers/char/dtlk.c
index abde6dd..3fd9284 100644
--- a/drivers/char/dtlk.c
+++ b/drivers/char/dtlk.c
@@ -62,6 +62,7 @@
#include <linux/init.h> /* for __init, module_{init,exit} */
#include <linux/poll.h> /* for POLLIN, etc. */
#include <linux/dtlk.h> /* local header file for DoubleTalk values */
+#include <linux/smp_lock.h>
#ifdef TRACING
#define TRACE_TEXT(str) printk(str);
@@ -91,8 +92,8 @@ static ssize_t dtlk_write(struct file *, const char __user *,
static unsigned int dtlk_poll(struct file *, poll_table *);
static int dtlk_open(struct inode *, struct file *);
static int dtlk_release(struct inode *, struct file *);
-static int dtlk_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg);
+static long dtlk_ioctl(struct file *file, unsigned int cmd,
+ unsigned long arg);
static const struct file_operations dtlk_fops =
{
@@ -100,7 +101,7 @@ static const struct file_operations dtlk_fops =
.read = dtlk_read,
.write = dtlk_write,
.poll = dtlk_poll,
- .ioctl = dtlk_ioctl,
+ .unlocked_ioctl = dtlk_ioctl,
.open = dtlk_open,
.release = dtlk_release,
};
@@ -261,10 +262,8 @@ static void dtlk_timer_tick(unsigned long data)
wake_up_interruptible(&dtlk_process_list);
}
-static int dtlk_ioctl(struct inode *inode,
- struct file *file,
- unsigned int cmd,
- unsigned long arg)
+static long dtlk_ioctl(struct file *file, unsigned int cmd,
+ unsigned long arg)
{
char __user *argp = (char __user *)arg;
struct dtlk_settings *sp;
@@ -274,17 +273,21 @@ static int dtlk_ioctl(struct inode *inode,
switch (cmd) {
case DTLK_INTERROGATE:
+ lock_kernel();
sp = dtlk_interrogate();
+ unlock_kernel();
if (copy_to_user(argp, sp, sizeof(struct dtlk_settings)))
return -EINVAL;
return 0;
case DTLK_STATUS:
+ lock_kernel();
portval = inb_p(dtlk_port_tts);
+ unlock_kernel();
return put_user(portval, argp);
default:
- return -EINVAL;
+ return -ENOTTY;
}
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2008-05-22 20:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-22 20:36 [PATCH] dtlk: Push down the BKL Alan Cox
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.