diff options
Diffstat (limited to 'drivers/misc/phantom.c')
| -rw-r--r-- | drivers/misc/phantom.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/misc/phantom.c b/drivers/misc/phantom.c index 75ee0d3f6f45..3712e5077e25 100644 --- a/drivers/misc/phantom.c +++ b/drivers/misc/phantom.c | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
| 25 | #include <linux/phantom.h> | 25 | #include <linux/phantom.h> |
| 26 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
| 27 | #include <linux/smp_lock.h> | 27 | #include <linux/mutex.h> |
| 28 | 28 | ||
| 29 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
| 30 | #include <asm/io.h> | 30 | #include <asm/io.h> |
| @@ -38,6 +38,7 @@ | |||
| 38 | #define PHB_RUNNING 1 | 38 | #define PHB_RUNNING 1 |
| 39 | #define PHB_NOT_OH 2 | 39 | #define PHB_NOT_OH 2 |
| 40 | 40 | ||
| 41 | static DEFINE_MUTEX(phantom_mutex); | ||
| 41 | static struct class *phantom_class; | 42 | static struct class *phantom_class; |
| 42 | static int phantom_major; | 43 | static int phantom_major; |
| 43 | 44 | ||
| @@ -215,17 +216,17 @@ static int phantom_open(struct inode *inode, struct file *file) | |||
| 215 | struct phantom_device *dev = container_of(inode->i_cdev, | 216 | struct phantom_device *dev = container_of(inode->i_cdev, |
| 216 | struct phantom_device, cdev); | 217 | struct phantom_device, cdev); |
| 217 | 218 | ||
| 218 | lock_kernel(); | 219 | mutex_lock(&phantom_mutex); |
| 219 | nonseekable_open(inode, file); | 220 | nonseekable_open(inode, file); |
| 220 | 221 | ||
| 221 | if (mutex_lock_interruptible(&dev->open_lock)) { | 222 | if (mutex_lock_interruptible(&dev->open_lock)) { |
| 222 | unlock_kernel(); | 223 | mutex_unlock(&phantom_mutex); |
| 223 | return -ERESTARTSYS; | 224 | return -ERESTARTSYS; |
| 224 | } | 225 | } |
| 225 | 226 | ||
| 226 | if (dev->opened) { | 227 | if (dev->opened) { |
| 227 | mutex_unlock(&dev->open_lock); | 228 | mutex_unlock(&dev->open_lock); |
| 228 | unlock_kernel(); | 229 | mutex_unlock(&phantom_mutex); |
| 229 | return -EINVAL; | 230 | return -EINVAL; |
| 230 | } | 231 | } |
| 231 | 232 | ||
| @@ -236,7 +237,7 @@ static int phantom_open(struct inode *inode, struct file *file) | |||
| 236 | atomic_set(&dev->counter, 0); | 237 | atomic_set(&dev->counter, 0); |
| 237 | dev->opened++; | 238 | dev->opened++; |
| 238 | mutex_unlock(&dev->open_lock); | 239 | mutex_unlock(&dev->open_lock); |
| 239 | unlock_kernel(); | 240 | mutex_unlock(&phantom_mutex); |
| 240 | return 0; | 241 | return 0; |
| 241 | } | 242 | } |
| 242 | 243 | ||
