X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fusb%2Fmisc%2Fldusb.c;fp=drivers%2Fusb%2Fmisc%2Fldusb.c;h=e2d1198623eb08c2e792c1d46338cc58026de115;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=f30ab1fbb3c8c5f119edf1ac66dd1e3d31341bfe;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c index f30ab1fbb..e2d119862 100644 --- a/drivers/usb/misc/ldusb.c +++ b/drivers/usb/misc/ldusb.c @@ -27,12 +27,12 @@ * V0.13 (mh) Added support for LD X-Ray and Machine Test System */ +#include #include #include #include #include #include -#include #include #include @@ -172,7 +172,7 @@ struct ld_usb { }; /* prevent races between open() and disconnect() */ -static DEFINE_MUTEX(disconnect_mutex); +static DECLARE_MUTEX(disconnect_sem); static struct usb_driver ld_usb_driver; @@ -293,7 +293,7 @@ static int ld_usb_open(struct inode *inode, struct file *file) nonseekable_open(inode, file); subminor = iminor(inode); - mutex_lock(&disconnect_mutex); + down(&disconnect_sem); interface = usb_find_interface(&ld_usb_driver, subminor); @@ -355,7 +355,7 @@ unlock_exit: up(&dev->sem); unlock_disconnect_exit: - mutex_unlock(&disconnect_mutex); + up(&disconnect_sem); return retval; } @@ -626,11 +626,12 @@ static int ld_usb_probe(struct usb_interface *intf, const struct usb_device_id * /* 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); @@ -740,7 +741,7 @@ static void ld_usb_disconnect(struct usb_interface *intf) struct ld_usb *dev; int minor; - mutex_lock(&disconnect_mutex); + down(&disconnect_sem); dev = usb_get_intfdata(intf); usb_set_intfdata(intf, NULL); @@ -761,7 +762,7 @@ static void ld_usb_disconnect(struct usb_interface *intf) 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));