diff options
| -rw-r--r-- | drivers/base/bus.c | 20 | ||||
| -rw-r--r-- | drivers/base/dd.c | 38 | ||||
| -rw-r--r-- | drivers/base/power/main.c | 20 | ||||
| -rw-r--r-- | drivers/firewire/core-device.c | 5 | ||||
| -rw-r--r-- | drivers/ieee1394/nodemgr.c | 5 | ||||
| -rw-r--r-- | drivers/pci/bus.c | 4 | ||||
| -rw-r--r-- | drivers/pci/pci.c | 4 | ||||
| -rw-r--r-- | drivers/pcmcia/ds.c | 8 | ||||
| -rw-r--r-- | drivers/usb/core/driver.c | 4 | ||||
| -rw-r--r-- | drivers/uwb/umc-bus.c | 4 | ||||
| -rw-r--r-- | drivers/uwb/uwb-internal.h | 4 | ||||
| -rw-r--r-- | include/linux/device.h | 17 | ||||
| -rw-r--r-- | include/linux/usb.h | 6 |
13 files changed, 76 insertions, 63 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index cca1aa10054c..71f6af5c8b0b 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
| @@ -173,10 +173,10 @@ static ssize_t driver_unbind(struct device_driver *drv, | |||
| 173 | dev = bus_find_device_by_name(bus, NULL, buf); | 173 | dev = bus_find_device_by_name(bus, NULL, buf); |
| 174 | if (dev && dev->driver == drv) { | 174 | if (dev && dev->driver == drv) { |
| 175 | if (dev->parent) /* Needed for USB */ | 175 | if (dev->parent) /* Needed for USB */ |
| 176 | down(&dev->parent->sem); | 176 | device_lock(dev->parent); |
| 177 | device_release_driver(dev); | 177 | device_release_driver(dev); |
| 178 | if (dev->parent) | 178 | if (dev->parent) |
| 179 | up(&dev->parent->sem); | 179 | device_unlock(dev->parent); |
| 180 | err = count; | 180 | err = count; |
| 181 | } | 181 | } |
| 182 | put_device(dev); | 182 | put_device(dev); |
| @@ -200,12 +200,12 @@ static ssize_t driver_bind(struct device_driver *drv, | |||
| 200 | dev = bus_find_device_by_name(bus, NULL, buf); | 200 | dev = bus_find_device_by_name(bus, NULL, buf); |
| 201 | if (dev && dev->driver == NULL && driver_match_device(drv, dev)) { | 201 | if (dev && dev->driver == NULL && driver_match_device(drv, dev)) { |
| 202 | if (dev->parent) /* Needed for USB */ | 202 | if (dev->parent) /* Needed for USB */ |
| 203 | down(&dev->parent->sem); | 203 | device_lock(dev->parent); |
| 204 | down(&dev->sem); | 204 | device_lock(dev); |
| 205 | err = driver_probe_device(drv, dev); | 205 | err = driver_probe_device(drv, dev); |
| 206 | up(&dev->sem); | 206 | device_unlock(dev); |
| 207 | if (dev->parent) | 207 | if (dev->parent) |
| 208 | up(&dev->parent->sem); | 208 | device_unlock(dev->parent); |
| 209 | 209 | ||
| 210 | if (err > 0) { | 210 | if (err > 0) { |
| 211 | /* success */ | 211 | /* success */ |
| @@ -744,10 +744,10 @@ static int __must_check bus_rescan_devices_helper(struct device *dev, | |||
| 744 | 744 | ||
| 745 | if (!dev->driver) { | 745 | if (!dev->driver) { |
| 746 | if (dev->parent) /* Needed for USB */ | 746 | if (dev->parent) /* Needed for USB */ |
| 747 | down(&dev->parent->sem); | 747 | device_lock(dev->parent); |
| 748 | ret = device_attach(dev); | 748 | ret = device_attach(dev); |
| 749 | if (dev->parent) | 749 | if (dev->parent) |
| 750 | up(&dev->parent->sem); | 750 | device_unlock(dev->parent); |
| 751 | } | 751 | } |
| 752 | return ret < 0 ? ret : 0; | 752 | return ret < 0 ? ret : 0; |
| 753 | } | 753 | } |
| @@ -779,10 +779,10 @@ int device_reprobe(struct device *dev) | |||
| 779 | { | 779 | { |
| 780 | if (dev->driver) { | 780 | if (dev->driver) { |
| 781 | if (dev->parent) /* Needed for USB */ | 781 | if (dev->parent) /* Needed for USB */ |
| 782 | down(&dev->parent->sem); | 782 | device_lock(dev->parent); |
| 783 | device_release_driver(dev); | 783 | device_release_driver(dev); |
| 784 | if (dev->parent) | 784 | if (dev->parent) |
| 785 | up(&dev->parent->sem); | 785 | device_unlock(dev->parent); |
| 786 | } | 786 | } |
| 787 | return bus_rescan_devices_helper(dev, NULL); | 787 | return bus_rescan_devices_helper(dev, NULL); |
| 788 | } | 788 | } |
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index ee95c76bfd3d..c89291f8a16b 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
| @@ -85,7 +85,7 @@ static void driver_sysfs_remove(struct device *dev) | |||
| 85 | * for before calling this. (It is ok to call with no other effort | 85 | * for before calling this. (It is ok to call with no other effort |
| 86 | * from a driver's probe() method.) | 86 | * from a driver's probe() method.) |
| 87 | * | 87 | * |
| 88 | * This function must be called with @dev->sem held. | 88 | * This function must be called with the device lock held. |
| 89 | */ | 89 | */ |
| 90 | int device_bind_driver(struct device *dev) | 90 | int device_bind_driver(struct device *dev) |
| 91 | { | 91 | { |
| @@ -190,8 +190,8 @@ EXPORT_SYMBOL_GPL(wait_for_device_probe); | |||
| 190 | * This function returns -ENODEV if the device is not registered, | 190 | * This function returns -ENODEV if the device is not registered, |
| 191 | * 1 if the device is bound successfully and 0 otherwise. | 191 | * 1 if the device is bound successfully and 0 otherwise. |
| 192 | * | 192 | * |
| 193 | * This function must be called with @dev->sem held. When called for a | 193 | * This function must be called with @dev lock held. When called for a |
| 194 | * USB interface, @dev->parent->sem must be held as well. | 194 | * USB interface, @dev->parent lock must be held as well. |
| 195 | */ | 195 | */ |
| 196 | int driver_probe_device(struct device_driver *drv, struct device *dev) | 196 | int driver_probe_device(struct device_driver *drv, struct device *dev) |
| 197 | { | 197 | { |
| @@ -233,13 +233,13 @@ static int __device_attach(struct device_driver *drv, void *data) | |||
| 233 | * 0 if no matching driver was found; | 233 | * 0 if no matching driver was found; |
| 234 | * -ENODEV if the device is not registered. | 234 | * -ENODEV if the device is not registered. |
| 235 | * | 235 | * |
| 236 | * When called for a USB interface, @dev->parent->sem must be held. | 236 | * When called for a USB interface, @dev->parent lock must be held. |
| 237 | */ | 237 | */ |
| 238 | int device_attach(struct device *dev) | 238 | int device_attach(struct device *dev) |
| 239 | { | 239 | { |
| 240 | int ret = 0; | 240 | int ret = 0; |
| 241 | 241 | ||
| 242 | down(&dev->sem); | 242 | device_lock(dev); |
| 243 | if (dev->driver) { | 243 | if (dev->driver) { |
| 244 | ret = device_bind_driver(dev); | 244 | ret = device_bind_driver(dev); |
| 245 | if (ret == 0) | 245 | if (ret == 0) |
| @@ -253,7 +253,7 @@ int device_attach(struct device *dev) | |||
| 253 | ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach); | 253 | ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach); |
| 254 | pm_runtime_put_sync(dev); | 254 | pm_runtime_put_sync(dev); |
| 255 | } | 255 | } |
| 256 | up(&dev->sem); | 256 | device_unlock(dev); |
| 257 | return ret; | 257 | return ret; |
| 258 | } | 258 | } |
| 259 | EXPORT_SYMBOL_GPL(device_attach); | 259 | EXPORT_SYMBOL_GPL(device_attach); |
| @@ -276,13 +276,13 @@ static int __driver_attach(struct device *dev, void *data) | |||
| 276 | return 0; | 276 | return 0; |
| 277 | 277 | ||
| 278 | if (dev->parent) /* Needed for USB */ | 278 | if (dev->parent) /* Needed for USB */ |
| 279 | down(&dev->parent->sem); | 279 | device_lock(dev->parent); |
| 280 | down(&dev->sem); | 280 | device_lock(dev); |
| 281 | if (!dev->driver) | 281 | if (!dev->driver) |
| 282 | driver_probe_device(drv, dev); | 282 | driver_probe_device(drv, dev); |
| 283 | up(&dev->sem); | 283 | device_unlock(dev); |
| 284 | if (dev->parent) | 284 | if (dev->parent) |
| 285 | up(&dev->parent->sem); | 285 | device_unlock(dev->parent); |
| 286 | 286 | ||
| 287 | return 0; | 287 | return 0; |
| 288 | } | 288 | } |
| @@ -303,8 +303,8 @@ int driver_attach(struct device_driver *drv) | |||
| 303 | EXPORT_SYMBOL_GPL(driver_attach); | 303 | EXPORT_SYMBOL_GPL(driver_attach); |
| 304 | 304 | ||
| 305 | /* | 305 | /* |
| 306 | * __device_release_driver() must be called with @dev->sem held. | 306 | * __device_release_driver() must be called with @dev lock held. |
| 307 | * When called for a USB interface, @dev->parent->sem must be held as well. | 307 | * When called for a USB interface, @dev->parent lock must be held as well. |
| 308 | */ | 308 | */ |
| 309 | static void __device_release_driver(struct device *dev) | 309 | static void __device_release_driver(struct device *dev) |
| 310 | { | 310 | { |
| @@ -343,7 +343,7 @@ static void __device_release_driver(struct device *dev) | |||
| 343 | * @dev: device. | 343 | * @dev: device. |
| 344 | * | 344 | * |
| 345 | * Manually detach device from driver. | 345 | * Manually detach device from driver. |
| 346 | * When called for a USB interface, @dev->parent->sem must be held. | 346 | * When called for a USB interface, @dev->parent lock must be held. |
| 347 | */ | 347 | */ |
| 348 | void device_release_driver(struct device *dev) | 348 | void device_release_driver(struct device *dev) |
| 349 | { | 349 | { |
| @@ -352,9 +352,9 @@ void device_release_driver(struct device *dev) | |||
| 352 | * within their ->remove callback for the same device, they | 352 | * within their ->remove callback for the same device, they |
| 353 | * will deadlock right here. | 353 | * will deadlock right here. |
| 354 | */ | 354 | */ |
| 355 | down(&dev->sem); | 355 | device_lock(dev); |
| 356 | __device_release_driver(dev); | 356 | __device_release_driver(dev); |
| 357 | up(&dev->sem); | 357 | device_unlock(dev); |
| 358 | } | 358 | } |
| 359 | EXPORT_SYMBOL_GPL(device_release_driver); | 359 | EXPORT_SYMBOL_GPL(device_release_driver); |
| 360 | 360 | ||
| @@ -381,13 +381,13 @@ void driver_detach(struct device_driver *drv) | |||
| 381 | spin_unlock(&drv->p->klist_devices.k_lock); | 381 | spin_unlock(&drv->p->klist_devices.k_lock); |
| 382 | 382 | ||
| 383 | if (dev->parent) /* Needed for USB */ | 383 | if (dev->parent) /* Needed for USB */ |
| 384 | down(&dev->parent->sem); | 384 | device_lock(dev->parent); |
| 385 | down(&dev->sem); | 385 | device_lock(dev); |
| 386 | if (dev->driver == drv) | 386 | if (dev->driver == drv) |
| 387 | __device_release_driver(dev); | 387 | __device_release_driver(dev); |
| 388 | up(&dev->sem); | 388 | device_unlock(dev); |
| 389 | if (dev->parent) | 389 | if (dev->parent) |
| 390 | up(&dev->parent->sem); | 390 | device_unlock(dev->parent); |
| 391 | put_device(dev); | 391 | put_device(dev); |
| 392 | } | 392 | } |
| 393 | } | 393 | } |
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 0e26a6f6fd48..d477f4dc5e51 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -35,8 +35,8 @@ | |||
| 35 | * because children are guaranteed to be discovered after parents, and | 35 | * because children are guaranteed to be discovered after parents, and |
| 36 | * are inserted at the back of the list on discovery. | 36 | * are inserted at the back of the list on discovery. |
| 37 | * | 37 | * |
| 38 | * Since device_pm_add() may be called with a device semaphore held, | 38 | * Since device_pm_add() may be called with a device lock held, |
| 39 | * we must never try to acquire a device semaphore while holding | 39 | * we must never try to acquire a device lock while holding |
| 40 | * dpm_list_mutex. | 40 | * dpm_list_mutex. |
| 41 | */ | 41 | */ |
| 42 | 42 | ||
| @@ -508,7 +508,7 @@ static int device_resume(struct device *dev, pm_message_t state, bool async) | |||
| 508 | TRACE_RESUME(0); | 508 | TRACE_RESUME(0); |
| 509 | 509 | ||
| 510 | dpm_wait(dev->parent, async); | 510 | dpm_wait(dev->parent, async); |
| 511 | down(&dev->sem); | 511 | device_lock(dev); |
| 512 | 512 | ||
| 513 | dev->power.status = DPM_RESUMING; | 513 | dev->power.status = DPM_RESUMING; |
| 514 | 514 | ||
| @@ -543,7 +543,7 @@ static int device_resume(struct device *dev, pm_message_t state, bool async) | |||
| 543 | } | 543 | } |
| 544 | } | 544 | } |
| 545 | End: | 545 | End: |
| 546 | up(&dev->sem); | 546 | device_unlock(dev); |
| 547 | complete_all(&dev->power.completion); | 547 | complete_all(&dev->power.completion); |
| 548 | 548 | ||
| 549 | TRACE_RESUME(error); | 549 | TRACE_RESUME(error); |
| @@ -629,7 +629,7 @@ static void dpm_resume(pm_message_t state) | |||
| 629 | */ | 629 | */ |
| 630 | static void device_complete(struct device *dev, pm_message_t state) | 630 | static void device_complete(struct device *dev, pm_message_t state) |
| 631 | { | 631 | { |
| 632 | down(&dev->sem); | 632 | device_lock(dev); |
| 633 | 633 | ||
| 634 | if (dev->class && dev->class->pm && dev->class->pm->complete) { | 634 | if (dev->class && dev->class->pm && dev->class->pm->complete) { |
| 635 | pm_dev_dbg(dev, state, "completing class "); | 635 | pm_dev_dbg(dev, state, "completing class "); |
| @@ -646,7 +646,7 @@ static void device_complete(struct device *dev, pm_message_t state) | |||
| 646 | dev->bus->pm->complete(dev); | 646 | dev->bus->pm->complete(dev); |
| 647 | } | 647 | } |
| 648 | 648 | ||
| 649 | up(&dev->sem); | 649 | device_unlock(dev); |
| 650 | } | 650 | } |
| 651 | 651 | ||
| 652 | /** | 652 | /** |
| @@ -809,7 +809,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) | |||
| 809 | int error = 0; | 809 | int error = 0; |
| 810 | 810 | ||
| 811 | dpm_wait_for_children(dev, async); | 811 | dpm_wait_for_children(dev, async); |
| 812 | down(&dev->sem); | 812 | device_lock(dev); |
| 813 | 813 | ||
| 814 | if (async_error) | 814 | if (async_error) |
| 815 | goto End; | 815 | goto End; |
| @@ -849,7 +849,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) | |||
| 849 | dev->power.status = DPM_OFF; | 849 | dev->power.status = DPM_OFF; |
| 850 | 850 | ||
| 851 | End: | 851 | End: |
| 852 | up(&dev->sem); | 852 | device_unlock(dev); |
| 853 | complete_all(&dev->power.completion); | 853 | complete_all(&dev->power.completion); |
| 854 | 854 | ||
| 855 | return error; | 855 | return error; |
| @@ -938,7 +938,7 @@ static int device_prepare(struct device *dev, pm_message_t state) | |||
| 938 | { | 938 | { |
| 939 | int error = 0; | 939 | int error = 0; |
| 940 | 940 | ||
| 941 | down(&dev->sem); | 941 | device_lock(dev); |
| 942 | 942 | ||
| 943 | if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) { | 943 | if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) { |
| 944 | pm_dev_dbg(dev, state, "preparing "); | 944 | pm_dev_dbg(dev, state, "preparing "); |
| @@ -962,7 +962,7 @@ static int device_prepare(struct device *dev, pm_message_t state) | |||
| 962 | suspend_report_result(dev->class->pm->prepare, error); | 962 | suspend_report_result(dev->class->pm->prepare, error); |
| 963 | } | 963 | } |
| 964 | End: | 964 | End: |
| 965 | up(&dev->sem); | 965 | device_unlock(dev); |
| 966 | 966 | ||
| 967 | return error; | 967 | return error; |
| 968 | } | 968 | } |
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c index 014cabd3afda..5db0518c66da 100644 --- a/drivers/firewire/core-device.c +++ b/drivers/firewire/core-device.c | |||
| @@ -33,7 +33,6 @@ | |||
| 33 | #include <linux/module.h> | 33 | #include <linux/module.h> |
| 34 | #include <linux/mutex.h> | 34 | #include <linux/mutex.h> |
| 35 | #include <linux/rwsem.h> | 35 | #include <linux/rwsem.h> |
| 36 | #include <linux/semaphore.h> | ||
| 37 | #include <linux/spinlock.h> | 36 | #include <linux/spinlock.h> |
| 38 | #include <linux/string.h> | 37 | #include <linux/string.h> |
| 39 | #include <linux/workqueue.h> | 38 | #include <linux/workqueue.h> |
| @@ -828,9 +827,9 @@ static int update_unit(struct device *dev, void *data) | |||
| 828 | struct fw_driver *driver = (struct fw_driver *)dev->driver; | 827 | struct fw_driver *driver = (struct fw_driver *)dev->driver; |
| 829 | 828 | ||
| 830 | if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) { | 829 | if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) { |
| 831 | down(&dev->sem); | 830 | device_lock(dev); |
| 832 | driver->update(unit); | 831 | driver->update(unit); |
| 833 | up(&dev->sem); | 832 | device_unlock(dev); |
| 834 | } | 833 | } |
| 835 | 834 | ||
| 836 | return 0; | 835 | return 0; |
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 5122b5a8aa2d..18350213479e 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/moduleparam.h> | 19 | #include <linux/moduleparam.h> |
| 20 | #include <linux/mutex.h> | 20 | #include <linux/mutex.h> |
| 21 | #include <linux/freezer.h> | 21 | #include <linux/freezer.h> |
| 22 | #include <linux/semaphore.h> | ||
| 23 | #include <asm/atomic.h> | 22 | #include <asm/atomic.h> |
| 24 | 23 | ||
| 25 | #include "csr.h" | 24 | #include "csr.h" |
| @@ -1397,9 +1396,9 @@ static int update_pdrv(struct device *dev, void *data) | |||
| 1397 | pdrv = container_of(drv, struct hpsb_protocol_driver, | 1396 | pdrv = container_of(drv, struct hpsb_protocol_driver, |
| 1398 | driver); | 1397 | driver); |
| 1399 | if (pdrv->update) { | 1398 | if (pdrv->update) { |
| 1400 | down(&ud->device.sem); | 1399 | device_lock(&ud->device); |
| 1401 | error = pdrv->update(ud); | 1400 | error = pdrv->update(ud); |
| 1402 | up(&ud->device.sem); | 1401 | device_unlock(&ud->device); |
| 1403 | } | 1402 | } |
| 1404 | if (error) | 1403 | if (error) |
| 1405 | device_release_driver(&ud->device); | 1404 | device_release_driver(&ud->device); |
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 712250f5874a..26301cb25e7f 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c | |||
| @@ -288,9 +288,9 @@ void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *), | |||
| 288 | next = dev->bus_list.next; | 288 | next = dev->bus_list.next; |
| 289 | 289 | ||
| 290 | /* Run device routines with the device locked */ | 290 | /* Run device routines with the device locked */ |
| 291 | down(&dev->dev.sem); | 291 | device_lock(&dev->dev); |
| 292 | retval = cb(dev, userdata); | 292 | retval = cb(dev, userdata); |
| 293 | up(&dev->dev.sem); | 293 | device_unlock(&dev->dev); |
| 294 | if (retval) | 294 | if (retval) |
| 295 | break; | 295 | break; |
| 296 | } | 296 | } |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 77b493b3d97b..897fa5ccdb78 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
| @@ -2486,7 +2486,7 @@ static int pci_dev_reset(struct pci_dev *dev, int probe) | |||
| 2486 | if (!probe) { | 2486 | if (!probe) { |
| 2487 | pci_block_user_cfg_access(dev); | 2487 | pci_block_user_cfg_access(dev); |
| 2488 | /* block PM suspend, driver probe, etc. */ | 2488 | /* block PM suspend, driver probe, etc. */ |
| 2489 | down(&dev->dev.sem); | 2489 | device_lock(&dev->dev); |
| 2490 | } | 2490 | } |
| 2491 | 2491 | ||
| 2492 | rc = pci_dev_specific_reset(dev, probe); | 2492 | rc = pci_dev_specific_reset(dev, probe); |
| @@ -2508,7 +2508,7 @@ static int pci_dev_reset(struct pci_dev *dev, int probe) | |||
| 2508 | rc = pci_parent_bus_reset(dev, probe); | 2508 | rc = pci_parent_bus_reset(dev, probe); |
| 2509 | done: | 2509 | done: |
| 2510 | if (!probe) { | 2510 | if (!probe) { |
| 2511 | up(&dev->dev.sem); | 2511 | device_unlock(&dev->dev); |
| 2512 | pci_unblock_user_cfg_access(dev); | 2512 | pci_unblock_user_cfg_access(dev); |
| 2513 | } | 2513 | } |
| 2514 | 2514 | ||
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 0f98be4450b7..ad93ebd7b2a2 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -971,9 +971,9 @@ static int runtime_suspend(struct device *dev) | |||
| 971 | { | 971 | { |
| 972 | int rc; | 972 | int rc; |
| 973 | 973 | ||
| 974 | down(&dev->sem); | 974 | device_lock(dev); |
| 975 | rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND); | 975 | rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND); |
| 976 | up(&dev->sem); | 976 | device_unlock(dev); |
| 977 | return rc; | 977 | return rc; |
| 978 | } | 978 | } |
| 979 | 979 | ||
| @@ -981,9 +981,9 @@ static int runtime_resume(struct device *dev) | |||
| 981 | { | 981 | { |
| 982 | int rc; | 982 | int rc; |
| 983 | 983 | ||
| 984 | down(&dev->sem); | 984 | device_lock(dev); |
| 985 | rc = pcmcia_dev_resume(dev); | 985 | rc = pcmcia_dev_resume(dev); |
| 986 | up(&dev->sem); | 986 | device_unlock(dev); |
| 987 | return rc; | 987 | return rc; |
| 988 | } | 988 | } |
| 989 | 989 | ||
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index a7037bf81688..f3c233806fa3 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
| @@ -489,10 +489,10 @@ void usb_driver_release_interface(struct usb_driver *driver, | |||
| 489 | if (device_is_registered(dev)) { | 489 | if (device_is_registered(dev)) { |
| 490 | device_release_driver(dev); | 490 | device_release_driver(dev); |
| 491 | } else { | 491 | } else { |
| 492 | down(&dev->sem); | 492 | device_lock(dev); |
| 493 | usb_unbind_interface(dev); | 493 | usb_unbind_interface(dev); |
| 494 | dev->driver = NULL; | 494 | dev->driver = NULL; |
| 495 | up(&dev->sem); | 495 | device_unlock(dev); |
| 496 | } | 496 | } |
| 497 | } | 497 | } |
| 498 | EXPORT_SYMBOL_GPL(usb_driver_release_interface); | 498 | EXPORT_SYMBOL_GPL(usb_driver_release_interface); |
diff --git a/drivers/uwb/umc-bus.c b/drivers/uwb/umc-bus.c index cdd6c8efc9f8..5fad4e791b3e 100644 --- a/drivers/uwb/umc-bus.c +++ b/drivers/uwb/umc-bus.c | |||
| @@ -62,12 +62,12 @@ int umc_controller_reset(struct umc_dev *umc) | |||
| 62 | struct device *parent = umc->dev.parent; | 62 | struct device *parent = umc->dev.parent; |
| 63 | int ret = 0; | 63 | int ret = 0; |
| 64 | 64 | ||
| 65 | if(down_trylock(&parent->sem)) | 65 | if (device_trylock(parent)) |
| 66 | return -EAGAIN; | 66 | return -EAGAIN; |
| 67 | ret = device_for_each_child(parent, parent, umc_bus_pre_reset_helper); | 67 | ret = device_for_each_child(parent, parent, umc_bus_pre_reset_helper); |
| 68 | if (ret >= 0) | 68 | if (ret >= 0) |
| 69 | ret = device_for_each_child(parent, parent, umc_bus_post_reset_helper); | 69 | ret = device_for_each_child(parent, parent, umc_bus_post_reset_helper); |
| 70 | up(&parent->sem); | 70 | device_unlock(parent); |
| 71 | 71 | ||
| 72 | return ret; | 72 | return ret; |
| 73 | } | 73 | } |
diff --git a/drivers/uwb/uwb-internal.h b/drivers/uwb/uwb-internal.h index d5bcfc1c227a..157485c862c0 100644 --- a/drivers/uwb/uwb-internal.h +++ b/drivers/uwb/uwb-internal.h | |||
| @@ -366,12 +366,12 @@ struct dentry *uwb_dbg_create_pal_dir(struct uwb_pal *pal); | |||
| 366 | 366 | ||
| 367 | static inline void uwb_dev_lock(struct uwb_dev *uwb_dev) | 367 | static inline void uwb_dev_lock(struct uwb_dev *uwb_dev) |
| 368 | { | 368 | { |
| 369 | down(&uwb_dev->dev.sem); | 369 | device_lock(&uwb_dev->dev); |
| 370 | } | 370 | } |
| 371 | 371 | ||
| 372 | static inline void uwb_dev_unlock(struct uwb_dev *uwb_dev) | 372 | static inline void uwb_dev_unlock(struct uwb_dev *uwb_dev) |
| 373 | { | 373 | { |
| 374 | up(&uwb_dev->dev.sem); | 374 | device_unlock(&uwb_dev->dev); |
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | #endif /* #ifndef __UWB_INTERNAL_H__ */ | 377 | #endif /* #ifndef __UWB_INTERNAL_H__ */ |
diff --git a/include/linux/device.h b/include/linux/device.h index f95d5bfe8248..182192892d45 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -106,7 +106,7 @@ extern int bus_unregister_notifier(struct bus_type *bus, | |||
| 106 | 106 | ||
| 107 | /* All 4 notifers below get called with the target struct device * | 107 | /* All 4 notifers below get called with the target struct device * |
| 108 | * as an argument. Note that those functions are likely to be called | 108 | * as an argument. Note that those functions are likely to be called |
| 109 | * with the device semaphore held in the core, so be careful. | 109 | * with the device lock held in the core, so be careful. |
| 110 | */ | 110 | */ |
| 111 | #define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */ | 111 | #define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */ |
| 112 | #define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */ | 112 | #define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */ |
| @@ -508,6 +508,21 @@ static inline bool device_async_suspend_enabled(struct device *dev) | |||
| 508 | return !!dev->power.async_suspend; | 508 | return !!dev->power.async_suspend; |
| 509 | } | 509 | } |
| 510 | 510 | ||
| 511 | static inline void device_lock(struct device *dev) | ||
| 512 | { | ||
| 513 | down(&dev->sem); | ||
| 514 | } | ||
| 515 | |||
| 516 | static inline int device_trylock(struct device *dev) | ||
| 517 | { | ||
| 518 | return down_trylock(&dev->sem); | ||
| 519 | } | ||
| 520 | |||
| 521 | static inline void device_unlock(struct device *dev) | ||
| 522 | { | ||
| 523 | up(&dev->sem); | ||
| 524 | } | ||
| 525 | |||
| 511 | void driver_init(void); | 526 | void driver_init(void); |
| 512 | 527 | ||
| 513 | /* | 528 | /* |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 3492abf82e75..8c9f053111bb 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -512,9 +512,9 @@ extern struct usb_device *usb_get_dev(struct usb_device *dev); | |||
| 512 | extern void usb_put_dev(struct usb_device *dev); | 512 | extern void usb_put_dev(struct usb_device *dev); |
| 513 | 513 | ||
| 514 | /* USB device locking */ | 514 | /* USB device locking */ |
| 515 | #define usb_lock_device(udev) down(&(udev)->dev.sem) | 515 | #define usb_lock_device(udev) device_lock(&(udev)->dev) |
| 516 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) | 516 | #define usb_unlock_device(udev) device_unlock(&(udev)->dev) |
| 517 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) | 517 | #define usb_trylock_device(udev) device_trylock(&(udev)->dev) |
| 518 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 518 | extern int usb_lock_device_for_reset(struct usb_device *udev, |
| 519 | const struct usb_interface *iface); | 519 | const struct usb_interface *iface); |
| 520 | 520 | ||
