Messages in this thread Patch in this message | | | Date | Thu, 22 May 2008 23:17:27 +0100 | From | Alan Cox <> | Subject | Re: [PATCH] apm_emu: push BKL down into ioctl handlers |
| |
On Thu, 22 May 2008 22:40:59 +0200 Sam Ravnborg <sam@ravnborg.org> wrote:
> On Thu, May 22, 2008 at 09:23:41PM +0100, Alan Cox wrote: > > Part of the elimination of the old lock based ioctl. This one can > > probably lose the remaining BKL pretty trivially > > > > Signed-off-by: Alan Cox <alan@redhat.com> > -ENOPATCH
Must be race between the sending gnomes and the pasting gnome ;)
diff --git a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c index cdd876d..4ea7188 100644 --- a/drivers/char/apm-emulation.c +++ b/drivers/char/apm-emulation.c @@ -29,6 +29,7 @@ #include <linux/completion.h> #include <linux/kthread.h> #include <linux/delay.h> +#include <linux/smp_lock.h> #include <asm/system.h> @@ -292,8 +293,7 @@ static unsigned int apm_poll(struct file *fp, poll_table * wait) * Only when everyone who has opened /dev/apm_bios with write permission * has acknowledge does the actual suspend happen. */ -static int -apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) +static long apm_ioctl(struct file *filp, u_int cmd, u_long arg) { struct apm_user *as = filp->private_data; int err = -EINVAL; @@ -301,6 +301,8 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) if (!as->suser || !as->writer) return -EPERM; + lock_kernel(); + switch (cmd) { case APM_IOC_SUSPEND: mutex_lock(&state_lock); @@ -378,7 +380,7 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) mutex_unlock(&state_lock); break; } - + unlock_kernel(); return err; } @@ -443,7 +445,7 @@ static struct file_operations apm_bios_fops = { .owner = THIS_MODULE, .read = apm_read, .poll = apm_poll, - .ioctl = apm_ioctl, + .unlocked_ioctl = apm_ioctl, .open = apm_open, .release = apm_release, };
| |