s390/diag: Create misc device /dev/diag
authorSumanth Korikkar <sumanthk@linux.ibm.com>
Thu, 12 Dec 2024 16:17:18 +0000 (17:17 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 17 Dec 2024 11:46:14 +0000 (12:46 +0100)
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>
arch/s390/kernel/diag/Makefile [new file with mode: 0644]
arch/s390/kernel/diag/diag_misc.c [new file with mode: 0644]

diff --git a/arch/s390/kernel/diag/Makefile b/arch/s390/kernel/diag/Makefile
new file mode 100644 (file)
index 0000000..15bfa86
--- /dev/null
@@ -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 (file)
index 0000000..cd5b788
--- /dev/null
@@ -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);