diff options
Diffstat (limited to 'drivers/isdn/capi/capi.c')
-rw-r--r-- | drivers/isdn/capi/capi.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c index db1260f73f10..81661b8bd3a8 100644 --- a/drivers/isdn/capi/capi.c +++ b/drivers/isdn/capi/capi.c | |||
@@ -18,8 +18,8 @@ | |||
18 | #include <linux/fcntl.h> | 18 | #include <linux/fcntl.h> |
19 | #include <linux/fs.h> | 19 | #include <linux/fs.h> |
20 | #include <linux/signal.h> | 20 | #include <linux/signal.h> |
21 | #include <linux/mutex.h> | ||
21 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
22 | #include <linux/smp_lock.h> | ||
23 | #include <linux/timer.h> | 23 | #include <linux/timer.h> |
24 | #include <linux/wait.h> | 24 | #include <linux/wait.h> |
25 | #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE | 25 | #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE |
@@ -147,7 +147,7 @@ struct capidev { | |||
147 | 147 | ||
148 | struct capincci *nccis; | 148 | struct capincci *nccis; |
149 | 149 | ||
150 | struct semaphore ncci_list_sem; | 150 | struct mutex ncci_list_mtx; |
151 | }; | 151 | }; |
152 | 152 | ||
153 | /* -------- global variables ---------------------------------------- */ | 153 | /* -------- global variables ---------------------------------------- */ |
@@ -395,7 +395,7 @@ static struct capidev *capidev_alloc(void) | |||
395 | if (!cdev) | 395 | if (!cdev) |
396 | return NULL; | 396 | return NULL; |
397 | 397 | ||
398 | init_MUTEX(&cdev->ncci_list_sem); | 398 | mutex_init(&cdev->ncci_list_mtx); |
399 | skb_queue_head_init(&cdev->recvqueue); | 399 | skb_queue_head_init(&cdev->recvqueue); |
400 | init_waitqueue_head(&cdev->recvwait); | 400 | init_waitqueue_head(&cdev->recvwait); |
401 | write_lock_irqsave(&capidev_list_lock, flags); | 401 | write_lock_irqsave(&capidev_list_lock, flags); |
@@ -414,9 +414,9 @@ static void capidev_free(struct capidev *cdev) | |||
414 | } | 414 | } |
415 | skb_queue_purge(&cdev->recvqueue); | 415 | skb_queue_purge(&cdev->recvqueue); |
416 | 416 | ||
417 | down(&cdev->ncci_list_sem); | 417 | mutex_lock(&cdev->ncci_list_mtx); |
418 | capincci_free(cdev, 0xffffffff); | 418 | capincci_free(cdev, 0xffffffff); |
419 | up(&cdev->ncci_list_sem); | 419 | mutex_unlock(&cdev->ncci_list_mtx); |
420 | 420 | ||
421 | write_lock_irqsave(&capidev_list_lock, flags); | 421 | write_lock_irqsave(&capidev_list_lock, flags); |
422 | list_del(&cdev->list); | 422 | list_del(&cdev->list); |
@@ -603,15 +603,15 @@ static void capi_recv_message(struct capi20_appl *ap, struct sk_buff *skb) | |||
603 | if (CAPIMSG_CMD(skb->data) == CAPI_CONNECT_B3_CONF) { | 603 | if (CAPIMSG_CMD(skb->data) == CAPI_CONNECT_B3_CONF) { |
604 | u16 info = CAPIMSG_U16(skb->data, 12); // Info field | 604 | u16 info = CAPIMSG_U16(skb->data, 12); // Info field |
605 | if (info == 0) { | 605 | if (info == 0) { |
606 | down(&cdev->ncci_list_sem); | 606 | mutex_lock(&cdev->ncci_list_mtx); |
607 | capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); | 607 | capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); |
608 | up(&cdev->ncci_list_sem); | 608 | mutex_unlock(&cdev->ncci_list_mtx); |
609 | } | 609 | } |
610 | } | 610 | } |
611 | if (CAPIMSG_CMD(skb->data) == CAPI_CONNECT_B3_IND) { | 611 | if (CAPIMSG_CMD(skb->data) == CAPI_CONNECT_B3_IND) { |
612 | down(&cdev->ncci_list_sem); | 612 | mutex_lock(&cdev->ncci_list_mtx); |
613 | capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); | 613 | capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); |
614 | up(&cdev->ncci_list_sem); | 614 | mutex_unlock(&cdev->ncci_list_mtx); |
615 | } | 615 | } |
616 | spin_lock_irqsave(&workaround_lock, flags); | 616 | spin_lock_irqsave(&workaround_lock, flags); |
617 | if (CAPIMSG_COMMAND(skb->data) != CAPI_DATA_B3) { | 617 | if (CAPIMSG_COMMAND(skb->data) != CAPI_DATA_B3) { |
@@ -752,9 +752,9 @@ capi_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos | |||
752 | CAPIMSG_SETAPPID(skb->data, cdev->ap.applid); | 752 | CAPIMSG_SETAPPID(skb->data, cdev->ap.applid); |
753 | 753 | ||
754 | if (CAPIMSG_CMD(skb->data) == CAPI_DISCONNECT_B3_RESP) { | 754 | if (CAPIMSG_CMD(skb->data) == CAPI_DISCONNECT_B3_RESP) { |
755 | down(&cdev->ncci_list_sem); | 755 | mutex_lock(&cdev->ncci_list_mtx); |
756 | capincci_free(cdev, CAPIMSG_NCCI(skb->data)); | 756 | capincci_free(cdev, CAPIMSG_NCCI(skb->data)); |
757 | up(&cdev->ncci_list_sem); | 757 | mutex_unlock(&cdev->ncci_list_mtx); |
758 | } | 758 | } |
759 | 759 | ||
760 | cdev->errcode = capi20_put_message(&cdev->ap, skb); | 760 | cdev->errcode = capi20_put_message(&cdev->ap, skb); |
@@ -939,9 +939,9 @@ capi_ioctl(struct inode *inode, struct file *file, | |||
939 | if (copy_from_user(&ncci, argp, sizeof(ncci))) | 939 | if (copy_from_user(&ncci, argp, sizeof(ncci))) |
940 | return -EFAULT; | 940 | return -EFAULT; |
941 | 941 | ||
942 | down(&cdev->ncci_list_sem); | 942 | mutex_lock(&cdev->ncci_list_mtx); |
943 | if ((nccip = capincci_find(cdev, (u32) ncci)) == 0) { | 943 | if ((nccip = capincci_find(cdev, (u32) ncci)) == 0) { |
944 | up(&cdev->ncci_list_sem); | 944 | mutex_unlock(&cdev->ncci_list_mtx); |
945 | return 0; | 945 | return 0; |
946 | } | 946 | } |
947 | #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE | 947 | #ifdef CONFIG_ISDN_CAPI_MIDDLEWARE |
@@ -949,7 +949,7 @@ capi_ioctl(struct inode *inode, struct file *file, | |||
949 | count += atomic_read(&mp->ttyopencount); | 949 | count += atomic_read(&mp->ttyopencount); |
950 | } | 950 | } |
951 | #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ | 951 | #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */ |
952 | up(&cdev->ncci_list_sem); | 952 | mutex_unlock(&cdev->ncci_list_mtx); |
953 | return count; | 953 | return count; |
954 | } | 954 | } |
955 | return 0; | 955 | return 0; |
@@ -964,14 +964,14 @@ capi_ioctl(struct inode *inode, struct file *file, | |||
964 | if (copy_from_user(&ncci, argp, | 964 | if (copy_from_user(&ncci, argp, |
965 | sizeof(ncci))) | 965 | sizeof(ncci))) |
966 | return -EFAULT; | 966 | return -EFAULT; |
967 | down(&cdev->ncci_list_sem); | 967 | mutex_lock(&cdev->ncci_list_mtx); |
968 | nccip = capincci_find(cdev, (u32) ncci); | 968 | nccip = capincci_find(cdev, (u32) ncci); |
969 | if (!nccip || (mp = nccip->minorp) == 0) { | 969 | if (!nccip || (mp = nccip->minorp) == 0) { |
970 | up(&cdev->ncci_list_sem); | 970 | mutex_unlock(&cdev->ncci_list_mtx); |
971 | return -ESRCH; | 971 | return -ESRCH; |
972 | } | 972 | } |
973 | unit = mp->minor; | 973 | unit = mp->minor; |
974 | up(&cdev->ncci_list_sem); | 974 | mutex_unlock(&cdev->ncci_list_mtx); |
975 | return unit; | 975 | return unit; |
976 | } | 976 | } |
977 | return 0; | 977 | return 0; |