aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/capi/capi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/isdn/capi/capi.c')
-rw-r--r--drivers/isdn/capi/capi.c34
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;