diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2007-04-09 11:52:31 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-04-27 13:57:30 -0400 |
commit | 341487a837c02cbd674d4751061e7d098b0b8e98 (patch) | |
tree | 58166480d534a86f7b096b81572bd51c8dad031d /drivers/usb/core/devio.c | |
parent | b7bb125dc3d0ca3f72c9116525ce0f018a9844e1 (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.c | 13 |
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 */ |