hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/usb/misc/usblcd.c
....@@ -30,15 +30,11 @@
3030 #define IOCTL_GET_DRV_VERSION 2
3131
3232
33
-static DEFINE_MUTEX(lcd_mutex);
3433 static const struct usb_device_id id_table[] = {
3534 { .idVendor = 0x10D2, .match_flags = USB_DEVICE_ID_MATCH_VENDOR, },
3635 { },
3736 };
3837 MODULE_DEVICE_TABLE(usb, id_table);
39
-
40
-static DEFINE_MUTEX(open_disc_mutex);
41
-
4238
4339 struct usb_lcd {
4440 struct usb_device *udev; /* init: probe_lcd */
....@@ -84,40 +80,29 @@
8480 struct usb_interface *interface;
8581 int subminor, r;
8682
87
- mutex_lock(&lcd_mutex);
8883 subminor = iminor(inode);
8984
9085 interface = usb_find_interface(&lcd_driver, subminor);
9186 if (!interface) {
92
- mutex_unlock(&lcd_mutex);
93
- printk(KERN_ERR "USBLCD: %s - error, can't find device for minor %d\n",
87
+ pr_err("USBLCD: %s - error, can't find device for minor %d\n",
9488 __func__, subminor);
9589 return -ENODEV;
9690 }
9791
98
- mutex_lock(&open_disc_mutex);
9992 dev = usb_get_intfdata(interface);
100
- if (!dev) {
101
- mutex_unlock(&open_disc_mutex);
102
- mutex_unlock(&lcd_mutex);
103
- return -ENODEV;
104
- }
10593
10694 /* increment our usage count for the device */
10795 kref_get(&dev->kref);
108
- mutex_unlock(&open_disc_mutex);
10996
11097 /* grab a power reference */
11198 r = usb_autopm_get_interface(interface);
11299 if (r < 0) {
113100 kref_put(&dev->kref, lcd_delete);
114
- mutex_unlock(&lcd_mutex);
115101 return r;
116102 }
117103
118104 /* save our object in the file's private structure */
119105 file->private_data = dev;
120
- mutex_unlock(&lcd_mutex);
121106
122107 return 0;
123108 }
....@@ -186,14 +171,12 @@
186171
187172 switch (cmd) {
188173 case IOCTL_GET_HARD_VERSION:
189
- mutex_lock(&lcd_mutex);
190174 bcdDevice = le16_to_cpu((dev->udev)->descriptor.bcdDevice);
191175 sprintf(buf, "%1d%1d.%1d%1d",
192176 (bcdDevice & 0xF000)>>12,
193177 (bcdDevice & 0xF00)>>8,
194178 (bcdDevice & 0xF0)>>4,
195179 (bcdDevice & 0xF));
196
- mutex_unlock(&lcd_mutex);
197180 if (copy_to_user((void __user *)arg, buf, strlen(buf)) != 0)
198181 return -EFAULT;
199182 break;
....@@ -204,7 +187,6 @@
204187 break;
205188 default:
206189 return -ENOTTY;
207
- break;
208190 }
209191
210192 return 0;
....@@ -388,7 +370,6 @@
388370 /* something prevented us from registering this driver */
389371 dev_err(&interface->dev,
390372 "Not able to get a minor for this device.\n");
391
- usb_set_intfdata(interface, NULL);
392373 goto error;
393374 }
394375
....@@ -434,13 +415,8 @@
434415
435416 static void lcd_disconnect(struct usb_interface *interface)
436417 {
437
- struct usb_lcd *dev;
418
+ struct usb_lcd *dev = usb_get_intfdata(interface);
438419 int minor = interface->minor;
439
-
440
- mutex_lock(&open_disc_mutex);
441
- dev = usb_get_intfdata(interface);
442
- usb_set_intfdata(interface, NULL);
443
- mutex_unlock(&open_disc_mutex);
444420
445421 /* give back our minor */
446422 usb_deregister_dev(interface, &lcd_class);