diff options
| -rw-r--r-- | drivers/s390/char/Kconfig | 3 | ||||
| -rw-r--r-- | drivers/s390/char/vmcp.c | 38 |
2 files changed, 9 insertions, 32 deletions
diff --git a/drivers/s390/char/Kconfig b/drivers/s390/char/Kconfig index 4e34d3686c23..40834f18754c 100644 --- a/drivers/s390/char/Kconfig +++ b/drivers/s390/char/Kconfig | |||
| @@ -148,13 +148,12 @@ config VMLOGRDR | |||
| 148 | This driver depends on the IUCV support driver. | 148 | This driver depends on the IUCV support driver. |
| 149 | 149 | ||
| 150 | config VMCP | 150 | config VMCP |
| 151 | tristate "Support for the z/VM CP interface (VM only)" | 151 | bool "Support for the z/VM CP interface" |
| 152 | depends on S390 | 152 | depends on S390 |
| 153 | help | 153 | help |
| 154 | Select this option if you want to be able to interact with the control | 154 | Select this option if you want to be able to interact with the control |
| 155 | program on z/VM | 155 | program on z/VM |
| 156 | 156 | ||
| 157 | |||
| 158 | config MONREADER | 157 | config MONREADER |
| 159 | tristate "API for reading z/VM monitor service records" | 158 | tristate "API for reading z/VM monitor service records" |
| 160 | depends on IUCV | 159 | depends on IUCV |
diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c index 5bb59d36a6d4..04e532eec032 100644 --- a/drivers/s390/char/vmcp.c +++ b/drivers/s390/char/vmcp.c | |||
| @@ -1,24 +1,20 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright IBM Corp. 2004,2007 | 2 | * Copyright IBM Corp. 2004,2010 |
| 3 | * Interface implementation for communication with the z/VM control program | 3 | * Interface implementation for communication with the z/VM control program |
| 4 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | ||
| 5 | * | 4 | * |
| 5 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | ||
| 6 | * | 6 | * |
| 7 | * z/VMs CP offers the possibility to issue commands via the diagnose code 8 | 7 | * z/VMs CP offers the possibility to issue commands via the diagnose code 8 |
| 8 | * this driver implements a character device that issues these commands and | 8 | * this driver implements a character device that issues these commands and |
| 9 | * returns the answer of CP. | 9 | * returns the answer of CP. |
| 10 | 10 | * | |
| 11 | * The idea of this driver is based on cpint from Neale Ferguson and #CP in CMS | 11 | * The idea of this driver is based on cpint from Neale Ferguson and #CP in CMS |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #define KMSG_COMPONENT "vmcp" | ||
| 15 | #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt | ||
| 16 | |||
| 17 | #include <linux/fs.h> | 14 | #include <linux/fs.h> |
| 18 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 19 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
| 20 | #include <linux/miscdevice.h> | 17 | #include <linux/miscdevice.h> |
| 21 | #include <linux/module.h> | ||
| 22 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
| 23 | #include <asm/compat.h> | 19 | #include <asm/compat.h> |
| 24 | #include <asm/cpcmd.h> | 20 | #include <asm/cpcmd.h> |
| @@ -26,10 +22,6 @@ | |||
| 26 | #include <asm/uaccess.h> | 22 | #include <asm/uaccess.h> |
| 27 | #include "vmcp.h" | 23 | #include "vmcp.h" |
| 28 | 24 | ||
| 29 | MODULE_LICENSE("GPL"); | ||
| 30 | MODULE_AUTHOR("Christian Borntraeger <borntraeger@de.ibm.com>"); | ||
| 31 | MODULE_DESCRIPTION("z/VM CP interface"); | ||
| 32 | |||
| 33 | static debug_info_t *vmcp_debug; | 25 | static debug_info_t *vmcp_debug; |
| 34 | 26 | ||
| 35 | static int vmcp_open(struct inode *inode, struct file *file) | 27 | static int vmcp_open(struct inode *inode, struct file *file) |
| @@ -197,11 +189,8 @@ static int __init vmcp_init(void) | |||
| 197 | { | 189 | { |
| 198 | int ret; | 190 | int ret; |
| 199 | 191 | ||
| 200 | if (!MACHINE_IS_VM) { | 192 | if (!MACHINE_IS_VM) |
| 201 | pr_warning("The z/VM CP interface device driver cannot be " | 193 | return 0; |
| 202 | "loaded without z/VM\n"); | ||
| 203 | return -ENODEV; | ||
| 204 | } | ||
| 205 | 194 | ||
| 206 | vmcp_debug = debug_register("vmcp", 1, 1, 240); | 195 | vmcp_debug = debug_register("vmcp", 1, 1, 240); |
| 207 | if (!vmcp_debug) | 196 | if (!vmcp_debug) |
| @@ -214,19 +203,8 @@ static int __init vmcp_init(void) | |||
| 214 | } | 203 | } |
| 215 | 204 | ||
| 216 | ret = misc_register(&vmcp_dev); | 205 | ret = misc_register(&vmcp_dev); |
| 217 | if (ret) { | 206 | if (ret) |
| 218 | debug_unregister(vmcp_debug); | 207 | debug_unregister(vmcp_debug); |
| 219 | return ret; | 208 | return ret; |
| 220 | } | ||
| 221 | |||
| 222 | return 0; | ||
| 223 | } | ||
| 224 | |||
| 225 | static void __exit vmcp_exit(void) | ||
| 226 | { | ||
| 227 | misc_deregister(&vmcp_dev); | ||
| 228 | debug_unregister(vmcp_debug); | ||
| 229 | } | 209 | } |
| 230 | 210 | device_initcall(vmcp_init); | |
| 231 | module_init(vmcp_init); | ||
| 232 | module_exit(vmcp_exit); | ||
