diff options
| -rw-r--r-- | drivers/usb/atm/cxacru.c | 9 | ||||
| -rw-r--r-- | drivers/usb/atm/ueagle-atm.c | 27 | ||||
| -rw-r--r-- | drivers/usb/atm/usbatm.c | 28 | ||||
| -rw-r--r-- | drivers/usb/atm/usbatm.h | 3 |
4 files changed, 35 insertions, 32 deletions
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c index 70a96e98152c..04631dcbabbc 100644 --- a/drivers/usb/atm/cxacru.c +++ b/drivers/usb/atm/cxacru.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <linux/init.h> | 36 | #include <linux/init.h> |
| 37 | #include <linux/device.h> /* FIXME: linux/firmware.h should include it itself */ | 37 | #include <linux/device.h> /* FIXME: linux/firmware.h should include it itself */ |
| 38 | #include <linux/firmware.h> | 38 | #include <linux/firmware.h> |
| 39 | #include <linux/mutex.h> | ||
| 39 | 40 | ||
| 40 | #include "usbatm.h" | 41 | #include "usbatm.h" |
| 41 | 42 | ||
| @@ -160,7 +161,7 @@ struct cxacru_data { | |||
| 160 | struct work_struct poll_work; | 161 | struct work_struct poll_work; |
| 161 | 162 | ||
| 162 | /* contol handles */ | 163 | /* contol handles */ |
| 163 | struct semaphore cm_serialize; | 164 | struct mutex cm_serialize; |
| 164 | u8 *rcv_buf; | 165 | u8 *rcv_buf; |
| 165 | u8 *snd_buf; | 166 | u8 *snd_buf; |
| 166 | struct urb *rcv_urb; | 167 | struct urb *rcv_urb; |
| @@ -219,7 +220,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, | |||
| 219 | goto fail; | 220 | goto fail; |
| 220 | } | 221 | } |
| 221 | 222 | ||
| 222 | down(&instance->cm_serialize); | 223 | mutex_lock(&instance->cm_serialize); |
| 223 | 224 | ||
| 224 | /* submit reading urb before the writing one */ | 225 | /* submit reading urb before the writing one */ |
| 225 | init_completion(&instance->rcv_done); | 226 | init_completion(&instance->rcv_done); |
| @@ -288,7 +289,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, | |||
| 288 | ret = offd; | 289 | ret = offd; |
| 289 | dbg("cm %#x", cm); | 290 | dbg("cm %#x", cm); |
| 290 | fail: | 291 | fail: |
| 291 | up(&instance->cm_serialize); | 292 | mutex_unlock(&instance->cm_serialize); |
| 292 | return ret; | 293 | return ret; |
| 293 | } | 294 | } |
| 294 | 295 | ||
| @@ -717,7 +718,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, | |||
| 717 | instance->snd_buf, PAGE_SIZE, | 718 | instance->snd_buf, PAGE_SIZE, |
| 718 | cxacru_blocking_completion, &instance->snd_done, 4); | 719 | cxacru_blocking_completion, &instance->snd_done, 4); |
| 719 | 720 | ||
| 720 | init_MUTEX(&instance->cm_serialize); | 721 | mutex_init(&instance->cm_serialize); |
| 721 | 722 | ||
| 722 | INIT_WORK(&instance->poll_work, (void *)cxacru_poll_status, instance); | 723 | INIT_WORK(&instance->poll_work, (void *)cxacru_poll_status, instance); |
| 723 | 724 | ||
diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c index 956cd9e82dee..4362cfd801b5 100644 --- a/drivers/usb/atm/ueagle-atm.c +++ b/drivers/usb/atm/ueagle-atm.c | |||
| @@ -63,6 +63,7 @@ | |||
| 63 | #include <linux/ctype.h> | 63 | #include <linux/ctype.h> |
| 64 | #include <linux/kthread.h> | 64 | #include <linux/kthread.h> |
| 65 | #include <linux/version.h> | 65 | #include <linux/version.h> |
| 66 | #include <linux/mutex.h> | ||
| 66 | #include <asm/unaligned.h> | 67 | #include <asm/unaligned.h> |
| 67 | 68 | ||
| 68 | #include "usbatm.h" | 69 | #include "usbatm.h" |
| @@ -358,7 +359,7 @@ struct intr_pkt { | |||
| 358 | #define INTR_PKT_SIZE 28 | 359 | #define INTR_PKT_SIZE 28 |
| 359 | 360 | ||
| 360 | static struct usb_driver uea_driver; | 361 | static struct usb_driver uea_driver; |
| 361 | static DECLARE_MUTEX(uea_semaphore); | 362 | static DEFINE_MUTEX(uea_mutex); |
| 362 | static const char *chip_name[] = {"ADI930", "Eagle I", "Eagle II", "Eagle III"}; | 363 | static const char *chip_name[] = {"ADI930", "Eagle I", "Eagle II", "Eagle III"}; |
| 363 | 364 | ||
| 364 | static int modem_index; | 365 | static int modem_index; |
| @@ -1418,13 +1419,13 @@ static ssize_t read_status(struct device *dev, struct device_attribute *attr, | |||
| 1418 | int ret = -ENODEV; | 1419 | int ret = -ENODEV; |
| 1419 | struct uea_softc *sc; | 1420 | struct uea_softc *sc; |
| 1420 | 1421 | ||
| 1421 | down(&uea_semaphore); | 1422 | mutex_lock(&uea_mutex); |
| 1422 | sc = dev_to_uea(dev); | 1423 | sc = dev_to_uea(dev); |
| 1423 | if (!sc) | 1424 | if (!sc) |
| 1424 | goto out; | 1425 | goto out; |
| 1425 | ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.state); | 1426 | ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.state); |
| 1426 | out: | 1427 | out: |
| 1427 | up(&uea_semaphore); | 1428 | mutex_unlock(&uea_mutex); |
| 1428 | return ret; | 1429 | return ret; |
| 1429 | } | 1430 | } |
| 1430 | 1431 | ||
| @@ -1434,14 +1435,14 @@ static ssize_t reboot(struct device *dev, struct device_attribute *attr, | |||
| 1434 | int ret = -ENODEV; | 1435 | int ret = -ENODEV; |
| 1435 | struct uea_softc *sc; | 1436 | struct uea_softc *sc; |
| 1436 | 1437 | ||
| 1437 | down(&uea_semaphore); | 1438 | mutex_lock(&uea_mutex); |
| 1438 | sc = dev_to_uea(dev); | 1439 | sc = dev_to_uea(dev); |
| 1439 | if (!sc) | 1440 | if (!sc) |
| 1440 | goto out; | 1441 | goto out; |
| 1441 | sc->reset = 1; | 1442 | sc->reset = 1; |
| 1442 | ret = count; | 1443 | ret = count; |
| 1443 | out: | 1444 | out: |
| 1444 | up(&uea_semaphore); | 1445 | mutex_unlock(&uea_mutex); |
| 1445 | return ret; | 1446 | return ret; |
| 1446 | } | 1447 | } |
| 1447 | 1448 | ||
| @@ -1453,7 +1454,7 @@ static ssize_t read_human_status(struct device *dev, struct device_attribute *at | |||
| 1453 | int ret = -ENODEV; | 1454 | int ret = -ENODEV; |
| 1454 | struct uea_softc *sc; | 1455 | struct uea_softc *sc; |
| 1455 | 1456 | ||
| 1456 | down(&uea_semaphore); | 1457 | mutex_lock(&uea_mutex); |
| 1457 | sc = dev_to_uea(dev); | 1458 | sc = dev_to_uea(dev); |
| 1458 | if (!sc) | 1459 | if (!sc) |
| 1459 | goto out; | 1460 | goto out; |
| @@ -1473,7 +1474,7 @@ static ssize_t read_human_status(struct device *dev, struct device_attribute *at | |||
| 1473 | break; | 1474 | break; |
| 1474 | } | 1475 | } |
| 1475 | out: | 1476 | out: |
| 1476 | up(&uea_semaphore); | 1477 | mutex_unlock(&uea_mutex); |
| 1477 | return ret; | 1478 | return ret; |
| 1478 | } | 1479 | } |
| 1479 | 1480 | ||
| @@ -1485,7 +1486,7 @@ static ssize_t read_delin(struct device *dev, struct device_attribute *attr, | |||
| 1485 | int ret = -ENODEV; | 1486 | int ret = -ENODEV; |
| 1486 | struct uea_softc *sc; | 1487 | struct uea_softc *sc; |
| 1487 | 1488 | ||
| 1488 | down(&uea_semaphore); | 1489 | mutex_lock(&uea_mutex); |
| 1489 | sc = dev_to_uea(dev); | 1490 | sc = dev_to_uea(dev); |
| 1490 | if (!sc) | 1491 | if (!sc) |
| 1491 | goto out; | 1492 | goto out; |
| @@ -1497,7 +1498,7 @@ static ssize_t read_delin(struct device *dev, struct device_attribute *attr, | |||
| 1497 | else | 1498 | else |
| 1498 | ret = sprintf(buf, "GOOD\n"); | 1499 | ret = sprintf(buf, "GOOD\n"); |
| 1499 | out: | 1500 | out: |
| 1500 | up(&uea_semaphore); | 1501 | mutex_unlock(&uea_mutex); |
| 1501 | return ret; | 1502 | return ret; |
| 1502 | } | 1503 | } |
| 1503 | 1504 | ||
| @@ -1511,7 +1512,7 @@ static ssize_t read_##name(struct device *dev, \ | |||
| 1511 | int ret = -ENODEV; \ | 1512 | int ret = -ENODEV; \ |
| 1512 | struct uea_softc *sc; \ | 1513 | struct uea_softc *sc; \ |
| 1513 | \ | 1514 | \ |
| 1514 | down(&uea_semaphore); \ | 1515 | mutex_lock(&uea_mutex); \ |
| 1515 | sc = dev_to_uea(dev); \ | 1516 | sc = dev_to_uea(dev); \ |
| 1516 | if (!sc) \ | 1517 | if (!sc) \ |
| 1517 | goto out; \ | 1518 | goto out; \ |
| @@ -1519,7 +1520,7 @@ static ssize_t read_##name(struct device *dev, \ | |||
| 1519 | if (reset) \ | 1520 | if (reset) \ |
| 1520 | sc->stats.phy.name = 0; \ | 1521 | sc->stats.phy.name = 0; \ |
| 1521 | out: \ | 1522 | out: \ |
| 1522 | up(&uea_semaphore); \ | 1523 | mutex_unlock(&uea_mutex); \ |
| 1523 | return ret; \ | 1524 | return ret; \ |
| 1524 | } \ | 1525 | } \ |
| 1525 | \ | 1526 | \ |
| @@ -1737,9 +1738,9 @@ static void uea_disconnect(struct usb_interface *intf) | |||
| 1737 | * Pre-firmware device has one interface | 1738 | * Pre-firmware device has one interface |
| 1738 | */ | 1739 | */ |
| 1739 | if (usb->config->desc.bNumInterfaces != 1 && ifnum == 0) { | 1740 | if (usb->config->desc.bNumInterfaces != 1 && ifnum == 0) { |
| 1740 | down(&uea_semaphore); | 1741 | mutex_lock(&uea_mutex); |
| 1741 | usbatm_usb_disconnect(intf); | 1742 | usbatm_usb_disconnect(intf); |
| 1742 | up(&uea_semaphore); | 1743 | mutex_unlock(&uea_mutex); |
| 1743 | uea_info(usb, "ADSL device removed\n"); | 1744 | uea_info(usb, "ADSL device removed\n"); |
| 1744 | } | 1745 | } |
| 1745 | 1746 | ||
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c index 5d339af16248..c1211fc037d9 100644 --- a/drivers/usb/atm/usbatm.c +++ b/drivers/usb/atm/usbatm.c | |||
| @@ -823,7 +823,7 @@ static int usbatm_atm_open(struct atm_vcc *vcc) | |||
| 823 | return -EINVAL; | 823 | return -EINVAL; |
| 824 | } | 824 | } |
| 825 | 825 | ||
| 826 | down(&instance->serialize); /* vs self, usbatm_atm_close, usbatm_usb_disconnect */ | 826 | mutex_lock(&instance->serialize); /* vs self, usbatm_atm_close, usbatm_usb_disconnect */ |
| 827 | 827 | ||
| 828 | if (instance->disconnected) { | 828 | if (instance->disconnected) { |
| 829 | atm_dbg(instance, "%s: disconnected!\n", __func__); | 829 | atm_dbg(instance, "%s: disconnected!\n", __func__); |
| @@ -867,7 +867,7 @@ static int usbatm_atm_open(struct atm_vcc *vcc) | |||
| 867 | set_bit(ATM_VF_PARTIAL, &vcc->flags); | 867 | set_bit(ATM_VF_PARTIAL, &vcc->flags); |
| 868 | set_bit(ATM_VF_READY, &vcc->flags); | 868 | set_bit(ATM_VF_READY, &vcc->flags); |
| 869 | 869 | ||
| 870 | up(&instance->serialize); | 870 | mutex_unlock(&instance->serialize); |
| 871 | 871 | ||
| 872 | atm_dbg(instance, "%s: allocated vcc data 0x%p\n", __func__, new); | 872 | atm_dbg(instance, "%s: allocated vcc data 0x%p\n", __func__, new); |
| 873 | 873 | ||
| @@ -875,7 +875,7 @@ static int usbatm_atm_open(struct atm_vcc *vcc) | |||
| 875 | 875 | ||
| 876 | fail: | 876 | fail: |
| 877 | kfree(new); | 877 | kfree(new); |
| 878 | up(&instance->serialize); | 878 | mutex_unlock(&instance->serialize); |
| 879 | return ret; | 879 | return ret; |
| 880 | } | 880 | } |
| 881 | 881 | ||
| @@ -896,7 +896,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc) | |||
| 896 | 896 | ||
| 897 | usbatm_cancel_send(instance, vcc); | 897 | usbatm_cancel_send(instance, vcc); |
| 898 | 898 | ||
| 899 | down(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */ | 899 | mutex_lock(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */ |
| 900 | 900 | ||
| 901 | tasklet_disable(&instance->rx_channel.tasklet); | 901 | tasklet_disable(&instance->rx_channel.tasklet); |
| 902 | if (instance->cached_vcc == vcc_data) { | 902 | if (instance->cached_vcc == vcc_data) { |
| @@ -919,7 +919,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc) | |||
| 919 | clear_bit(ATM_VF_PARTIAL, &vcc->flags); | 919 | clear_bit(ATM_VF_PARTIAL, &vcc->flags); |
| 920 | clear_bit(ATM_VF_ADDR, &vcc->flags); | 920 | clear_bit(ATM_VF_ADDR, &vcc->flags); |
| 921 | 921 | ||
| 922 | up(&instance->serialize); | 922 | mutex_unlock(&instance->serialize); |
| 923 | 923 | ||
| 924 | atm_dbg(instance, "%s successful\n", __func__); | 924 | atm_dbg(instance, "%s successful\n", __func__); |
| 925 | } | 925 | } |
| @@ -1009,9 +1009,9 @@ static int usbatm_do_heavy_init(void *arg) | |||
| 1009 | if (!ret) | 1009 | if (!ret) |
| 1010 | ret = usbatm_atm_init(instance); | 1010 | ret = usbatm_atm_init(instance); |
| 1011 | 1011 | ||
| 1012 | down(&instance->serialize); | 1012 | mutex_lock(&instance->serialize); |
| 1013 | instance->thread_pid = -1; | 1013 | instance->thread_pid = -1; |
| 1014 | up(&instance->serialize); | 1014 | mutex_unlock(&instance->serialize); |
| 1015 | 1015 | ||
| 1016 | complete_and_exit(&instance->thread_exited, ret); | 1016 | complete_and_exit(&instance->thread_exited, ret); |
| 1017 | } | 1017 | } |
| @@ -1025,9 +1025,9 @@ static int usbatm_heavy_init(struct usbatm_data *instance) | |||
| 1025 | return ret; | 1025 | return ret; |
| 1026 | } | 1026 | } |
| 1027 | 1027 | ||
| 1028 | down(&instance->serialize); | 1028 | mutex_lock(&instance->serialize); |
| 1029 | instance->thread_pid = ret; | 1029 | instance->thread_pid = ret; |
| 1030 | up(&instance->serialize); | 1030 | mutex_unlock(&instance->serialize); |
| 1031 | 1031 | ||
| 1032 | wait_for_completion(&instance->thread_started); | 1032 | wait_for_completion(&instance->thread_started); |
| 1033 | 1033 | ||
| @@ -1110,7 +1110,7 @@ int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id, | |||
| 1110 | /* private fields */ | 1110 | /* private fields */ |
| 1111 | 1111 | ||
| 1112 | kref_init(&instance->refcount); /* dropped in usbatm_usb_disconnect */ | 1112 | kref_init(&instance->refcount); /* dropped in usbatm_usb_disconnect */ |
| 1113 | init_MUTEX(&instance->serialize); | 1113 | mutex_init(&instance->serialize); |
| 1114 | 1114 | ||
| 1115 | instance->thread_pid = -1; | 1115 | instance->thread_pid = -1; |
| 1116 | init_completion(&instance->thread_started); | 1116 | init_completion(&instance->thread_started); |
| @@ -1273,18 +1273,18 @@ void usbatm_usb_disconnect(struct usb_interface *intf) | |||
| 1273 | 1273 | ||
| 1274 | usb_set_intfdata(intf, NULL); | 1274 | usb_set_intfdata(intf, NULL); |
| 1275 | 1275 | ||
| 1276 | down(&instance->serialize); | 1276 | mutex_lock(&instance->serialize); |
| 1277 | instance->disconnected = 1; | 1277 | instance->disconnected = 1; |
| 1278 | if (instance->thread_pid >= 0) | 1278 | if (instance->thread_pid >= 0) |
| 1279 | kill_proc(instance->thread_pid, SIGTERM, 1); | 1279 | kill_proc(instance->thread_pid, SIGTERM, 1); |
| 1280 | up(&instance->serialize); | 1280 | mutex_unlock(&instance->serialize); |
| 1281 | 1281 | ||
| 1282 | wait_for_completion(&instance->thread_exited); | 1282 | wait_for_completion(&instance->thread_exited); |
| 1283 | 1283 | ||
| 1284 | down(&instance->serialize); | 1284 | mutex_lock(&instance->serialize); |
| 1285 | list_for_each_entry(vcc_data, &instance->vcc_list, list) | 1285 | list_for_each_entry(vcc_data, &instance->vcc_list, list) |
| 1286 | vcc_release_async(vcc_data->vcc, -EPIPE); | 1286 | vcc_release_async(vcc_data->vcc, -EPIPE); |
| 1287 | up(&instance->serialize); | 1287 | mutex_unlock(&instance->serialize); |
| 1288 | 1288 | ||
| 1289 | tasklet_disable(&instance->rx_channel.tasklet); | 1289 | tasklet_disable(&instance->rx_channel.tasklet); |
| 1290 | tasklet_disable(&instance->tx_channel.tasklet); | 1290 | tasklet_disable(&instance->tx_channel.tasklet); |
diff --git a/drivers/usb/atm/usbatm.h b/drivers/usb/atm/usbatm.h index 1cf4767007de..ff8551e93372 100644 --- a/drivers/usb/atm/usbatm.h +++ b/drivers/usb/atm/usbatm.h | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/list.h> | 34 | #include <linux/list.h> |
| 35 | #include <linux/stringify.h> | 35 | #include <linux/stringify.h> |
| 36 | #include <linux/usb.h> | 36 | #include <linux/usb.h> |
| 37 | #include <linux/mutex.h> | ||
| 37 | 38 | ||
| 38 | /* | 39 | /* |
| 39 | #define VERBOSE_DEBUG | 40 | #define VERBOSE_DEBUG |
| @@ -171,7 +172,7 @@ struct usbatm_data { | |||
| 171 | ********************************/ | 172 | ********************************/ |
| 172 | 173 | ||
| 173 | struct kref refcount; | 174 | struct kref refcount; |
| 174 | struct semaphore serialize; | 175 | struct mutex serialize; |
| 175 | int disconnected; | 176 | int disconnected; |
| 176 | 177 | ||
| 177 | /* heavy init */ | 178 | /* heavy init */ |
