diff options
Diffstat (limited to 'drivers/char/applicom.c')
| -rw-r--r-- | drivers/char/applicom.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c index f4ae0e0fb631..e7ba774beda6 100644 --- a/drivers/char/applicom.c +++ b/drivers/char/applicom.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
| 27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
| 28 | #include <linux/errno.h> | 28 | #include <linux/errno.h> |
| 29 | #include <linux/smp_lock.h> | 29 | #include <linux/mutex.h> |
| 30 | #include <linux/miscdevice.h> | 30 | #include <linux/miscdevice.h> |
| 31 | #include <linux/pci.h> | 31 | #include <linux/pci.h> |
| 32 | #include <linux/wait.h> | 32 | #include <linux/wait.h> |
| @@ -60,6 +60,7 @@ | |||
| 60 | #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003 | 60 | #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003 |
| 61 | #endif | 61 | #endif |
| 62 | 62 | ||
| 63 | static DEFINE_MUTEX(ac_mutex); | ||
| 63 | static char *applicom_pci_devnames[] = { | 64 | static char *applicom_pci_devnames[] = { |
| 64 | "PCI board", | 65 | "PCI board", |
| 65 | "PCI2000IBS / PCI2000CAN", | 66 | "PCI2000IBS / PCI2000CAN", |
| @@ -707,7 +708,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 707 | if (IS_ERR(adgl)) | 708 | if (IS_ERR(adgl)) |
| 708 | return PTR_ERR(adgl); | 709 | return PTR_ERR(adgl); |
| 709 | 710 | ||
| 710 | lock_kernel(); | 711 | mutex_lock(&ac_mutex); |
| 711 | IndexCard = adgl->num_card-1; | 712 | IndexCard = adgl->num_card-1; |
| 712 | 713 | ||
| 713 | if(cmd != 6 && ((IndexCard >= MAX_BOARD) || !apbs[IndexCard].RamIO)) { | 714 | if(cmd != 6 && ((IndexCard >= MAX_BOARD) || !apbs[IndexCard].RamIO)) { |
| @@ -717,7 +718,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 717 | warncount--; | 718 | warncount--; |
| 718 | } | 719 | } |
| 719 | kfree(adgl); | 720 | kfree(adgl); |
| 720 | unlock_kernel(); | 721 | mutex_unlock(&ac_mutex); |
| 721 | return -EINVAL; | 722 | return -EINVAL; |
| 722 | } | 723 | } |
| 723 | 724 | ||
| @@ -835,7 +836,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 835 | } | 836 | } |
| 836 | Dummy = readb(apbs[IndexCard].RamIO + VERS); | 837 | Dummy = readb(apbs[IndexCard].RamIO + VERS); |
| 837 | kfree(adgl); | 838 | kfree(adgl); |
| 838 | unlock_kernel(); | 839 | mutex_unlock(&ac_mutex); |
| 839 | return 0; | 840 | return 0; |
| 840 | } | 841 | } |
| 841 | 842 | ||
