Messages in this thread Patch in this message | | | Date | Thu, 22 May 2008 21:39:33 +0100 | From | Alan Cox <> | Subject | [PATCH] hpet: push BKL down into hpet driver |
| |
Signed-off-by: Alan Cox <alan@redhat.com>
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index e7fb0bc..054060f 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c @@ -30,6 +30,7 @@ #include <linux/seq_file.h> #include <linux/bitops.h> #include <linux/clocksource.h> +#include <linux/smp_lock.h> #include <asm/current.h> #include <asm/uaccess.h> @@ -371,16 +372,19 @@ static int hpet_release(struct inode *inode, struct file *file) return 0; } -static int hpet_ioctl_common(struct hpet_dev *, int, unsigned long, int); +static long hpet_ioctl_common(struct hpet_dev *, int, unsigned long, int); -static int -hpet_ioctl(struct inode *inode, struct file *file, unsigned int cmd, - unsigned long arg) +static long hpet_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) { - struct hpet_dev *devp; + struct hpet_dev *devp = file->private_data; + long ret; - devp = file->private_data; - return hpet_ioctl_common(devp, cmd, arg, 0); + lock_kernel(); + ret = hpet_ioctl_common(devp, cmd, arg, 0); + unlock_kernel(); + + return ret; } static int hpet_ioctl_ieon(struct hpet_dev *devp) @@ -476,8 +480,8 @@ static inline unsigned long hpet_time_div(struct hpets *hpets, return (unsigned long)m; } -static int -hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg, int kernel) +static long hpet_ioctl_common(struct hpet_dev *devp, int cmd, + unsigned long arg, int kernel) { struct hpet_timer __iomem *timer; struct hpet __iomem *hpet; @@ -582,7 +586,7 @@ static const struct file_operations hpet_fops = { .llseek = no_llseek, .read = hpet_read, .poll = hpet_poll, - .ioctl = hpet_ioctl, + .unlocked_ioctl = hpet_ioctl, .open = hpet_open, .release = hpet_release, .fasync = hpet_fasync,
| |