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 | ||