diff options
author | Sumanth Korikkar <sumanthk@linux.ibm.com> | 2024-12-12 17:17:18 +0100 |
---|---|---|
committer | Alexander Gordeev <agordeev@linux.ibm.com> | 2024-12-17 12:46:14 +0100 |
commit | 2478d43ed621c4d15549142c0cfe6fa4a05e5f10 (patch) | |
tree | 55dd11d03a952f2ee2d695a8c2d6295180c8bb73 | |
parent | 807e39ed4da2cd7e6fe2c38a8d41d36f4c59e861 (diff) |
s390/diag: Create misc device /dev/diag
Create a misc device /dev/diag to fetch diagnose specific information
from the kernel and provide it to userspace.
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
-rw-r--r-- | arch/s390/kernel/diag/Makefile | 1 | ||||
-rw-r--r-- | arch/s390/kernel/diag/diag_misc.c | 45 |
2 files changed, 46 insertions, 0 deletions
diff --git a/arch/s390/kernel/diag/Makefile b/arch/s390/kernel/diag/Makefile new file mode 100644 index 000000000000..15bfa866c44d --- /dev/null +++ b/arch/s390/kernel/diag/Makefile @@ -0,0 +1 @@ +obj-y := diag_misc.o diff --git a/arch/s390/kernel/diag/diag_misc.c b/arch/s390/kernel/diag/diag_misc.c new file mode 100644 index 000000000000..cd5b78880d7d --- /dev/null +++ b/arch/s390/kernel/diag/diag_misc.c @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Provide diagnose information via misc device /dev/diag. + * + * Copyright IBM Corp. 2024 + */ + +#include <linux/fs.h> +#include <linux/init.h> +#include <linux/ioctl.h> +#include <linux/kernel.h> +#include <linux/miscdevice.h> +#include <linux/types.h> + +static long diag_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + long rc; + + switch (cmd) { + default: + rc = -ENOIOCTLCMD; + break; + } + return rc; +} + +static const struct file_operations fops = { + .owner = THIS_MODULE, + .open = nonseekable_open, + .unlocked_ioctl = diag_ioctl, +}; + +static struct miscdevice diagdev = { + .name = "diag", + .minor = MISC_DYNAMIC_MINOR, + .fops = &fops, + .mode = 0444, +}; + +static int diag_init(void) +{ + return misc_register(&diagdev); +} + +device_initcall(diag_init); |