diff options
Diffstat (limited to 'drivers/s390/char/monreader.c')
-rw-r--r-- | drivers/s390/char/monreader.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/s390/char/monreader.c b/drivers/s390/char/monreader.c index 66e21dd23154..2ed3f82e5c30 100644 --- a/drivers/s390/char/monreader.c +++ b/drivers/s390/char/monreader.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/moduleparam.h> | 13 | #include <linux/moduleparam.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/smp_lock.h> | ||
16 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
17 | #include <linux/types.h> | 16 | #include <linux/types.h> |
18 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
@@ -22,6 +21,7 @@ | |||
22 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
23 | #include <linux/poll.h> | 22 | #include <linux/poll.h> |
24 | #include <linux/device.h> | 23 | #include <linux/device.h> |
24 | #include <linux/slab.h> | ||
25 | #include <net/iucv/iucv.h> | 25 | #include <net/iucv/iucv.h> |
26 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
27 | #include <asm/ebcdic.h> | 27 | #include <asm/ebcdic.h> |
@@ -283,7 +283,6 @@ static int mon_open(struct inode *inode, struct file *filp) | |||
283 | /* | 283 | /* |
284 | * only one user allowed | 284 | * only one user allowed |
285 | */ | 285 | */ |
286 | lock_kernel(); | ||
287 | rc = -EBUSY; | 286 | rc = -EBUSY; |
288 | if (test_and_set_bit(MON_IN_USE, &mon_in_use)) | 287 | if (test_and_set_bit(MON_IN_USE, &mon_in_use)) |
289 | goto out; | 288 | goto out; |
@@ -321,7 +320,6 @@ static int mon_open(struct inode *inode, struct file *filp) | |||
321 | } | 320 | } |
322 | filp->private_data = monpriv; | 321 | filp->private_data = monpriv; |
323 | dev_set_drvdata(monreader_device, monpriv); | 322 | dev_set_drvdata(monreader_device, monpriv); |
324 | unlock_kernel(); | ||
325 | return nonseekable_open(inode, filp); | 323 | return nonseekable_open(inode, filp); |
326 | 324 | ||
327 | out_path: | 325 | out_path: |
@@ -331,7 +329,6 @@ out_priv: | |||
331 | out_use: | 329 | out_use: |
332 | clear_bit(MON_IN_USE, &mon_in_use); | 330 | clear_bit(MON_IN_USE, &mon_in_use); |
333 | out: | 331 | out: |
334 | unlock_kernel(); | ||
335 | return rc; | 332 | return rc; |
336 | } | 333 | } |
337 | 334 | ||
@@ -533,7 +530,7 @@ static int monreader_restore(struct device *dev) | |||
533 | return monreader_thaw(dev); | 530 | return monreader_thaw(dev); |
534 | } | 531 | } |
535 | 532 | ||
536 | static struct dev_pm_ops monreader_pm_ops = { | 533 | static const struct dev_pm_ops monreader_pm_ops = { |
537 | .freeze = monreader_freeze, | 534 | .freeze = monreader_freeze, |
538 | .thaw = monreader_thaw, | 535 | .thaw = monreader_thaw, |
539 | .restore = monreader_restore, | 536 | .restore = monreader_restore, |
@@ -607,6 +604,10 @@ static int __init mon_init(void) | |||
607 | } | 604 | } |
608 | dcss_mkname(mon_dcss_name, &user_data_connect[8]); | 605 | dcss_mkname(mon_dcss_name, &user_data_connect[8]); |
609 | 606 | ||
607 | /* | ||
608 | * misc_register() has to be the last action in module_init(), because | ||
609 | * file operations will be available right after this. | ||
610 | */ | ||
610 | rc = misc_register(&mon_dev); | 611 | rc = misc_register(&mon_dev); |
611 | if (rc < 0 ) | 612 | if (rc < 0 ) |
612 | goto out; | 613 | goto out; |