#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
-#include <linux/mutex.h>
#include <asm/uaccess.h>
#include <linux/input.h>
};
/* prevent races between open() and disconnect() */
-static DEFINE_MUTEX(disconnect_mutex);
+static DECLARE_MUTEX(disconnect_sem);
static struct usb_driver ld_usb_driver;
nonseekable_open(inode, file);
subminor = iminor(inode);
- mutex_lock(&disconnect_mutex);
+ down(&disconnect_sem);
interface = usb_find_interface(&ld_usb_driver, subminor);
up(&dev->sem);
unlock_disconnect_exit:
- mutex_unlock(&disconnect_mutex);
+ up(&disconnect_sem);
return retval;
}
/* allocate memory for our device state and intialize it */
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ dev = kmalloc(sizeof(*dev), GFP_KERNEL);
if (dev == NULL) {
dev_err(&intf->dev, "Out of memory\n");
goto exit;
}
+ memset(dev, 0x00, sizeof(*dev));
init_MUTEX(&dev->sem);
dev->intf = intf;
init_waitqueue_head(&dev->read_wait);
struct ld_usb *dev;
int minor;
- mutex_lock(&disconnect_mutex);
+ down(&disconnect_sem);
dev = usb_get_intfdata(intf);
usb_set_intfdata(intf, NULL);
up(&dev->sem);
}
- mutex_unlock(&disconnect_mutex);
+ up(&disconnect_sem);
dev_info(&intf->dev, "LD USB Device #%d now disconnected\n",
(minor - USB_LD_MINOR_BASE));