diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-06 18:55:34 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-06 18:55:34 -0500 |
| commit | 6572a281cfd805dd54718597d6c33261b5be052b (patch) | |
| tree | 9e61bf01db351d4371e2daf12fcf50213281572d | |
| parent | e252f4db187ef02d06c8551069d944d327b8bb9a (diff) | |
| parent | 8449fc3ae58bf8ee5acbd2280754cde67b5db128 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
ieee1394: dv1394: fix possible deadlock in multithreaded clients
ieee1394: raw1394: fix possible deadlock in multithreaded clients
ieee1394: struct device - replace bus_id with dev_name(), dev_set_name()
firewire: struct device - replace bus_id with dev_name(), dev_set_name()
| -rw-r--r-- | drivers/firewire/fw-device.c | 14 | ||||
| -rw-r--r-- | drivers/firewire/fw-ohci.c | 2 | ||||
| -rw-r--r-- | drivers/firewire/fw-sbp2.c | 2 | ||||
| -rw-r--r-- | drivers/ieee1394/dv1394.c | 10 | ||||
| -rw-r--r-- | drivers/ieee1394/hosts.c | 4 | ||||
| -rw-r--r-- | drivers/ieee1394/nodemgr.c | 14 | ||||
| -rw-r--r-- | drivers/ieee1394/raw1394.c | 9 |
7 files changed, 29 insertions, 26 deletions
diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c index 3fccdd484100..6b9be42c7b98 100644 --- a/drivers/firewire/fw-device.c +++ b/drivers/firewire/fw-device.c | |||
| @@ -587,8 +587,7 @@ static void create_units(struct fw_device *device) | |||
| 587 | unit->device.bus = &fw_bus_type; | 587 | unit->device.bus = &fw_bus_type; |
| 588 | unit->device.type = &fw_unit_type; | 588 | unit->device.type = &fw_unit_type; |
| 589 | unit->device.parent = &device->device; | 589 | unit->device.parent = &device->device; |
| 590 | snprintf(unit->device.bus_id, sizeof(unit->device.bus_id), | 590 | dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++); |
| 591 | "%s.%d", device->device.bus_id, i++); | ||
| 592 | 591 | ||
| 593 | init_fw_attribute_group(&unit->device, | 592 | init_fw_attribute_group(&unit->device, |
| 594 | fw_unit_attributes, | 593 | fw_unit_attributes, |
| @@ -711,8 +710,7 @@ static void fw_device_init(struct work_struct *work) | |||
| 711 | device->device.type = &fw_device_type; | 710 | device->device.type = &fw_device_type; |
| 712 | device->device.parent = device->card->device; | 711 | device->device.parent = device->card->device; |
| 713 | device->device.devt = MKDEV(fw_cdev_major, minor); | 712 | device->device.devt = MKDEV(fw_cdev_major, minor); |
| 714 | snprintf(device->device.bus_id, sizeof(device->device.bus_id), | 713 | dev_set_name(&device->device, "fw%d", minor); |
| 715 | "fw%d", minor); | ||
| 716 | 714 | ||
| 717 | init_fw_attribute_group(&device->device, | 715 | init_fw_attribute_group(&device->device, |
| 718 | fw_device_attributes, | 716 | fw_device_attributes, |
| @@ -741,13 +739,13 @@ static void fw_device_init(struct work_struct *work) | |||
| 741 | if (device->config_rom_retries) | 739 | if (device->config_rom_retries) |
| 742 | fw_notify("created device %s: GUID %08x%08x, S%d00, " | 740 | fw_notify("created device %s: GUID %08x%08x, S%d00, " |
| 743 | "%d config ROM retries\n", | 741 | "%d config ROM retries\n", |
| 744 | device->device.bus_id, | 742 | dev_name(&device->device), |
| 745 | device->config_rom[3], device->config_rom[4], | 743 | device->config_rom[3], device->config_rom[4], |
| 746 | 1 << device->max_speed, | 744 | 1 << device->max_speed, |
| 747 | device->config_rom_retries); | 745 | device->config_rom_retries); |
| 748 | else | 746 | else |
| 749 | fw_notify("created device %s: GUID %08x%08x, S%d00\n", | 747 | fw_notify("created device %s: GUID %08x%08x, S%d00\n", |
| 750 | device->device.bus_id, | 748 | dev_name(&device->device), |
| 751 | device->config_rom[3], device->config_rom[4], | 749 | device->config_rom[3], device->config_rom[4], |
| 752 | 1 << device->max_speed); | 750 | 1 << device->max_speed); |
| 753 | device->config_rom_retries = 0; | 751 | device->config_rom_retries = 0; |
| @@ -883,12 +881,12 @@ static void fw_device_refresh(struct work_struct *work) | |||
| 883 | FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) | 881 | FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) |
| 884 | goto gone; | 882 | goto gone; |
| 885 | 883 | ||
| 886 | fw_notify("refreshed device %s\n", device->device.bus_id); | 884 | fw_notify("refreshed device %s\n", dev_name(&device->device)); |
| 887 | device->config_rom_retries = 0; | 885 | device->config_rom_retries = 0; |
| 888 | goto out; | 886 | goto out; |
| 889 | 887 | ||
| 890 | give_up: | 888 | give_up: |
| 891 | fw_notify("giving up on refresh of device %s\n", device->device.bus_id); | 889 | fw_notify("giving up on refresh of device %s\n", dev_name(&device->device)); |
| 892 | gone: | 890 | gone: |
| 893 | atomic_set(&device->state, FW_DEVICE_SHUTDOWN); | 891 | atomic_set(&device->state, FW_DEVICE_SHUTDOWN); |
| 894 | fw_device_shutdown(work); | 892 | fw_device_shutdown(work); |
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c index 8e16bfbdcb3d..46610b090415 100644 --- a/drivers/firewire/fw-ohci.c +++ b/drivers/firewire/fw-ohci.c | |||
| @@ -2468,7 +2468,7 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) | |||
| 2468 | goto fail_self_id; | 2468 | goto fail_self_id; |
| 2469 | 2469 | ||
| 2470 | fw_notify("Added fw-ohci device %s, OHCI version %x.%x\n", | 2470 | fw_notify("Added fw-ohci device %s, OHCI version %x.%x\n", |
| 2471 | dev->dev.bus_id, version >> 16, version & 0xff); | 2471 | dev_name(&dev->dev), version >> 16, version & 0xff); |
| 2472 | return 0; | 2472 | return 0; |
| 2473 | 2473 | ||
| 2474 | fail_self_id: | 2474 | fail_self_id: |
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index d334cac5e1fc..97df6dac3a82 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c | |||
| @@ -1135,7 +1135,7 @@ static int sbp2_probe(struct device *dev) | |||
| 1135 | tgt->unit = unit; | 1135 | tgt->unit = unit; |
| 1136 | kref_init(&tgt->kref); | 1136 | kref_init(&tgt->kref); |
| 1137 | INIT_LIST_HEAD(&tgt->lu_list); | 1137 | INIT_LIST_HEAD(&tgt->lu_list); |
| 1138 | tgt->bus_id = unit->device.bus_id; | 1138 | tgt->bus_id = dev_name(&unit->device); |
| 1139 | tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4]; | 1139 | tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4]; |
| 1140 | 1140 | ||
| 1141 | if (fw_device_enable_phys_dma(device) < 0) | 1141 | if (fw_device_enable_phys_dma(device) < 0) |
diff --git a/drivers/ieee1394/dv1394.c b/drivers/ieee1394/dv1394.c index 965cfdb84ebc..c19f23267157 100644 --- a/drivers/ieee1394/dv1394.c +++ b/drivers/ieee1394/dv1394.c | |||
| @@ -1270,8 +1270,14 @@ static int dv1394_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 1270 | struct video_card *video = file_to_video_card(file); | 1270 | struct video_card *video = file_to_video_card(file); |
| 1271 | int retval = -EINVAL; | 1271 | int retval = -EINVAL; |
| 1272 | 1272 | ||
| 1273 | /* serialize mmap */ | 1273 | /* |
| 1274 | mutex_lock(&video->mtx); | 1274 | * We cannot use the blocking variant mutex_lock here because .mmap |
| 1275 | * is called with mmap_sem held, while .ioctl, .read, .write acquire | ||
| 1276 | * video->mtx and subsequently call copy_to/from_user which will | ||
| 1277 | * grab mmap_sem in case of a page fault. | ||
| 1278 | */ | ||
| 1279 | if (!mutex_trylock(&video->mtx)) | ||
| 1280 | return -EAGAIN; | ||
| 1275 | 1281 | ||
| 1276 | if ( ! video_card_initialized(video) ) { | 1282 | if ( ! video_card_initialized(video) ) { |
| 1277 | retval = do_dv1394_init_default(video); | 1283 | retval = do_dv1394_init_default(video); |
diff --git a/drivers/ieee1394/hosts.c b/drivers/ieee1394/hosts.c index 8dd09d850419..237d0c9d69c6 100644 --- a/drivers/ieee1394/hosts.c +++ b/drivers/ieee1394/hosts.c | |||
| @@ -155,11 +155,11 @@ struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, | |||
| 155 | memcpy(&h->device, &nodemgr_dev_template_host, sizeof(h->device)); | 155 | memcpy(&h->device, &nodemgr_dev_template_host, sizeof(h->device)); |
| 156 | h->device.parent = dev; | 156 | h->device.parent = dev; |
| 157 | set_dev_node(&h->device, dev_to_node(dev)); | 157 | set_dev_node(&h->device, dev_to_node(dev)); |
| 158 | snprintf(h->device.bus_id, BUS_ID_SIZE, "fw-host%d", h->id); | 158 | dev_set_name(&h->device, "fw-host%d", h->id); |
| 159 | 159 | ||
| 160 | h->host_dev.parent = &h->device; | 160 | h->host_dev.parent = &h->device; |
| 161 | h->host_dev.class = &hpsb_host_class; | 161 | h->host_dev.class = &hpsb_host_class; |
| 162 | snprintf(h->host_dev.bus_id, BUS_ID_SIZE, "fw-host%d", h->id); | 162 | dev_set_name(&h->host_dev, "fw-host%d", h->id); |
| 163 | 163 | ||
| 164 | if (device_register(&h->device)) | 164 | if (device_register(&h->device)) |
| 165 | goto fail; | 165 | goto fail; |
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 2376b729e876..9e39f73282ee 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
| @@ -826,13 +826,11 @@ static struct node_entry *nodemgr_create_node(octlet_t guid, | |||
| 826 | memcpy(&ne->device, &nodemgr_dev_template_ne, | 826 | memcpy(&ne->device, &nodemgr_dev_template_ne, |
| 827 | sizeof(ne->device)); | 827 | sizeof(ne->device)); |
| 828 | ne->device.parent = &host->device; | 828 | ne->device.parent = &host->device; |
| 829 | snprintf(ne->device.bus_id, BUS_ID_SIZE, "%016Lx", | 829 | dev_set_name(&ne->device, "%016Lx", (unsigned long long)(ne->guid)); |
| 830 | (unsigned long long)(ne->guid)); | ||
| 831 | 830 | ||
| 832 | ne->node_dev.parent = &ne->device; | 831 | ne->node_dev.parent = &ne->device; |
| 833 | ne->node_dev.class = &nodemgr_ne_class; | 832 | ne->node_dev.class = &nodemgr_ne_class; |
| 834 | snprintf(ne->node_dev.bus_id, BUS_ID_SIZE, "%016Lx", | 833 | dev_set_name(&ne->node_dev, "%016Lx", (unsigned long long)(ne->guid)); |
| 835 | (unsigned long long)(ne->guid)); | ||
| 836 | 834 | ||
| 837 | if (device_register(&ne->device)) | 835 | if (device_register(&ne->device)) |
| 838 | goto fail_devreg; | 836 | goto fail_devreg; |
| @@ -932,13 +930,11 @@ static void nodemgr_register_device(struct node_entry *ne, | |||
| 932 | 930 | ||
| 933 | ud->device.parent = parent; | 931 | ud->device.parent = parent; |
| 934 | 932 | ||
| 935 | snprintf(ud->device.bus_id, BUS_ID_SIZE, "%s-%u", | 933 | dev_set_name(&ud->device, "%s-%u", dev_name(&ne->device), ud->id); |
| 936 | ne->device.bus_id, ud->id); | ||
| 937 | 934 | ||
| 938 | ud->unit_dev.parent = &ud->device; | 935 | ud->unit_dev.parent = &ud->device; |
| 939 | ud->unit_dev.class = &nodemgr_ud_class; | 936 | ud->unit_dev.class = &nodemgr_ud_class; |
| 940 | snprintf(ud->unit_dev.bus_id, BUS_ID_SIZE, "%s-%u", | 937 | dev_set_name(&ud->unit_dev, "%s-%u", dev_name(&ne->device), ud->id); |
| 941 | ne->device.bus_id, ud->id); | ||
| 942 | 938 | ||
| 943 | if (device_register(&ud->device)) | 939 | if (device_register(&ud->device)) |
| 944 | goto fail_devreg; | 940 | goto fail_devreg; |
| @@ -953,7 +949,7 @@ static void nodemgr_register_device(struct node_entry *ne, | |||
| 953 | fail_classdevreg: | 949 | fail_classdevreg: |
| 954 | device_unregister(&ud->device); | 950 | device_unregister(&ud->device); |
| 955 | fail_devreg: | 951 | fail_devreg: |
| 956 | HPSB_ERR("Failed to create unit %s", ud->device.bus_id); | 952 | HPSB_ERR("Failed to create unit %s", dev_name(&ud->device)); |
| 957 | } | 953 | } |
| 958 | 954 | ||
| 959 | 955 | ||
diff --git a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c index 9f19ac492106..bf7e761c12b1 100644 --- a/drivers/ieee1394/raw1394.c +++ b/drivers/ieee1394/raw1394.c | |||
| @@ -2268,7 +2268,8 @@ static ssize_t raw1394_write(struct file *file, const char __user * buffer, | |||
| 2268 | return -EFAULT; | 2268 | return -EFAULT; |
| 2269 | } | 2269 | } |
| 2270 | 2270 | ||
| 2271 | mutex_lock(&fi->state_mutex); | 2271 | if (!mutex_trylock(&fi->state_mutex)) |
| 2272 | return -EAGAIN; | ||
| 2272 | 2273 | ||
| 2273 | switch (fi->state) { | 2274 | switch (fi->state) { |
| 2274 | case opened: | 2275 | case opened: |
| @@ -2548,7 +2549,8 @@ static int raw1394_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 2548 | struct file_info *fi = file->private_data; | 2549 | struct file_info *fi = file->private_data; |
| 2549 | int ret; | 2550 | int ret; |
| 2550 | 2551 | ||
| 2551 | mutex_lock(&fi->state_mutex); | 2552 | if (!mutex_trylock(&fi->state_mutex)) |
| 2553 | return -EAGAIN; | ||
| 2552 | 2554 | ||
| 2553 | if (fi->iso_state == RAW1394_ISO_INACTIVE) | 2555 | if (fi->iso_state == RAW1394_ISO_INACTIVE) |
| 2554 | ret = -EINVAL; | 2556 | ret = -EINVAL; |
| @@ -2669,7 +2671,8 @@ static long raw1394_ioctl(struct file *file, unsigned int cmd, | |||
| 2669 | break; | 2671 | break; |
| 2670 | } | 2672 | } |
| 2671 | 2673 | ||
| 2672 | mutex_lock(&fi->state_mutex); | 2674 | if (!mutex_trylock(&fi->state_mutex)) |
| 2675 | return -EAGAIN; | ||
| 2673 | 2676 | ||
| 2674 | switch (fi->iso_state) { | 2677 | switch (fi->iso_state) { |
| 2675 | case RAW1394_ISO_INACTIVE: | 2678 | case RAW1394_ISO_INACTIVE: |
