lkml.org 
[lkml]   [2008]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [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,
    };

    \
     
     \ /
      Last update: 2008-05-23 00:33    [W:0.023 / U:0.348 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site