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
    Subject[PATCH] usblcd: Push down BKL into driver
    I'm pretty sure this can be eliminated however I couldn't prove (or find)
    what stopped the device vanishing mid IOCTL_GET_HARD_VERSION. Perhaps a
    USB wizard could double check that and see if the lock_kernel can go
    entirely.

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

    diff --git a/drivers/usb/misc/usblcd.c b/drivers/usb/misc/usblcd.c
    index 7f7021e..2db4228 100644
    --- a/drivers/usb/misc/usblcd.c
    +++ b/drivers/usb/misc/usblcd.c
    @@ -146,7 +146,7 @@ static ssize_t lcd_read(struct file *file, char __user * buffer, size_t count, l
    return retval;
    }

    -static int lcd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
    +static long lcd_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
    {
    struct usb_lcd *dev;
    u16 bcdDevice;
    @@ -158,12 +158,14 @@ static int lcd_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u

    switch (cmd) {
    case IOCTL_GET_HARD_VERSION:
    + lock_kernel();
    bcdDevice = le16_to_cpu((dev->udev)->descriptor.bcdDevice);
    sprintf(buf,"%1d%1d.%1d%1d",
    (bcdDevice & 0xF000)>>12,
    (bcdDevice & 0xF00)>>8,
    (bcdDevice & 0xF0)>>4,
    (bcdDevice & 0xF));
    + unlock_kernel();
    if (copy_to_user((void __user *)arg,buf,strlen(buf))!=0)
    return -EFAULT;
    break;
    @@ -272,7 +274,7 @@ static const struct file_operations lcd_fops = {
    .read = lcd_read,
    .write = lcd_write,
    .open = lcd_open,
    - .ioctl = lcd_ioctl,
    + .unlocked_ioctl = lcd_ioctl,
    .release = lcd_release,
    };


    \
     
     \ /
      Last update: 2008-05-22 23:23    [W:0.049 / U:0.488 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site