aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/devio.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2007-04-09 11:52:31 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-04-27 13:57:30 -0400
commit341487a837c02cbd674d4751061e7d098b0b8e98 (patch)
tree58166480d534a86f7b096b81572bd51c8dad031d /drivers/usb/core/devio.c
parentb7bb125dc3d0ca3f72c9116525ce0f018a9844e1 (diff)
USB: remove use of the bus rwsem, as it doesn't really protect anything.
The driver core stopped using the rwsem a long time ago, yet the USB core still grabbed the lock, thinking it protected something. This patch removes that useless use. Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Oliver Neukum <oneukum@suse.de> Cc: David Brownell <david-b@pacbell.net> Cc: linux-usb-devel <linux-usb-devel@lists.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/devio.c')
-rw-r--r--drivers/usb/core/devio.c13
1 files changed, 0 insertions, 13 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 36e7a843bf9..fc3545ddb06 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -421,14 +421,11 @@ static int claimintf(struct dev_state *ps, unsigned int ifnum)
421 if (test_bit(ifnum, &ps->ifclaimed)) 421 if (test_bit(ifnum, &ps->ifclaimed))
422 return 0; 422 return 0;
423 423
424 /* lock against other changes to driver bindings */
425 down_write(&usb_bus_type.subsys.rwsem);
426 intf = usb_ifnum_to_if(dev, ifnum); 424 intf = usb_ifnum_to_if(dev, ifnum);
427 if (!intf) 425 if (!intf)
428 err = -ENOENT; 426 err = -ENOENT;
429 else 427 else
430 err = usb_driver_claim_interface(&usbfs_driver, intf, ps); 428 err = usb_driver_claim_interface(&usbfs_driver, intf, ps);
431 up_write(&usb_bus_type.subsys.rwsem);
432 if (err == 0) 429 if (err == 0)
433 set_bit(ifnum, &ps->ifclaimed); 430 set_bit(ifnum, &ps->ifclaimed);
434 return err; 431 return err;
@@ -444,8 +441,6 @@ static int releaseintf(struct dev_state *ps, unsigned int ifnum)
444 if (ifnum >= 8*sizeof(ps->ifclaimed)) 441 if (ifnum >= 8*sizeof(ps->ifclaimed))
445 return err; 442 return err;
446 dev = ps->dev; 443 dev = ps->dev;
447 /* lock against other changes to driver bindings */
448 down_write(&usb_bus_type.subsys.rwsem);
449 intf = usb_ifnum_to_if(dev, ifnum); 444 intf = usb_ifnum_to_if(dev, ifnum);
450 if (!intf) 445 if (!intf)
451 err = -ENOENT; 446 err = -ENOENT;
@@ -453,7 +448,6 @@ static int releaseintf(struct dev_state *ps, unsigned int ifnum)
453 usb_driver_release_interface(&usbfs_driver, intf); 448 usb_driver_release_interface(&usbfs_driver, intf);
454 err = 0; 449 err = 0;
455 } 450 }
456 up_write(&usb_bus_type.subsys.rwsem);
457 return err; 451 return err;
458} 452}
459 453
@@ -813,7 +807,6 @@ static int proc_getdriver(struct dev_state *ps, void __user *arg)
813 807
814 if (copy_from_user(&gd, arg, sizeof(gd))) 808 if (copy_from_user(&gd, arg, sizeof(gd)))
815 return -EFAULT; 809 return -EFAULT;
816 down_read(&usb_bus_type.subsys.rwsem);
817 intf = usb_ifnum_to_if(ps->dev, gd.interface); 810 intf = usb_ifnum_to_if(ps->dev, gd.interface);
818 if (!intf || !intf->dev.driver) 811 if (!intf || !intf->dev.driver)
819 ret = -ENODATA; 812 ret = -ENODATA;
@@ -822,7 +815,6 @@ static int proc_getdriver(struct dev_state *ps, void __user *arg)
822 sizeof(gd.driver)); 815 sizeof(gd.driver));
823 ret = (copy_to_user(arg, &gd, sizeof(gd)) ? -EFAULT : 0); 816 ret = (copy_to_user(arg, &gd, sizeof(gd)) ? -EFAULT : 0);
824 } 817 }
825 up_read(&usb_bus_type.subsys.rwsem);
826 return ret; 818 return ret;
827} 819}
828 820
@@ -1351,15 +1343,12 @@ static int proc_ioctl(struct dev_state *ps, struct usbdevfs_ioctl *ctl)
1351 1343
1352 /* disconnect kernel driver from interface */ 1344 /* disconnect kernel driver from interface */
1353 case USBDEVFS_DISCONNECT: 1345 case USBDEVFS_DISCONNECT:
1354
1355 down_write(&usb_bus_type.subsys.rwsem);
1356 if (intf->dev.driver) { 1346 if (intf->dev.driver) {
1357 driver = to_usb_driver(intf->dev.driver); 1347 driver = to_usb_driver(intf->dev.driver);
1358 dev_dbg (&intf->dev, "disconnect by usbfs\n"); 1348 dev_dbg (&intf->dev, "disconnect by usbfs\n");
1359 usb_driver_release_interface(driver, intf); 1349 usb_driver_release_interface(driver, intf);
1360 } else 1350 } else
1361 retval = -ENODATA; 1351 retval = -ENODATA;
1362 up_write(&usb_bus_type.subsys.rwsem);
1363 break; 1352 break;
1364 1353
1365 /* let kernel drivers try to (re)bind to the interface */ 1354 /* let kernel drivers try to (re)bind to the interface */
@@ -1371,7 +1360,6 @@ static int proc_ioctl(struct dev_state *ps, struct usbdevfs_ioctl *ctl)
1371 1360
1372 /* talk directly to the interface's driver */ 1361 /* talk directly to the interface's driver */
1373 default: 1362 default:
1374 down_read(&usb_bus_type.subsys.rwsem);
1375 if (intf->dev.driver) 1363 if (intf->dev.driver)
1376 driver = to_usb_driver(intf->dev.driver); 1364 driver = to_usb_driver(intf->dev.driver);
1377 if (driver == NULL || driver->ioctl == NULL) { 1365 if (driver == NULL || driver->ioctl == NULL) {
@@ -1381,7 +1369,6 @@ static int proc_ioctl(struct dev_state *ps, struct usbdevfs_ioctl *ctl)
1381 if (retval == -ENOIOCTLCMD) 1369 if (retval == -ENOIOCTLCMD)
1382 retval = -ENOTTY; 1370 retval = -ENOTTY;
1383 } 1371 }
1384 up_read(&usb_bus_type.subsys.rwsem);
1385 } 1372 }
1386 1373
1387 /* cleanup and return */ 1374 /* cleanup and return */