s390-vfio-ap: introduces s390 kernel debug feature for vfio_ap device driver
authorTony Krowiak <akrowiak@linux.ibm.com>
Tue, 26 Oct 2021 20:58:31 +0000 (16:58 -0400)
committerVasily Gorbik <gor@linux.ibm.com>
Sun, 6 Feb 2022 22:31:29 +0000 (23:31 +0100)
Sets up an s390dbf debug log for the vfio_ap device driver for logging
events occurring during the lifetime of the driver.

Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
drivers/s390/crypto/vfio_ap_debug.h [new file with mode: 0644]
drivers/s390/crypto/vfio_ap_drv.c

diff --git a/drivers/s390/crypto/vfio_ap_debug.h b/drivers/s390/crypto/vfio_ap_debug.h
new file mode 100644 (file)
index 0000000..1801561
--- /dev/null
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ *  Copyright IBM Corp. 2022
+ *
+ * Author(s): Tony Krowiak <akrowiak@linux.ibm.com>
+ */
+#ifndef VFIO_AP_DEBUG_H
+#define VFIO_AP_DEBUG_H
+
+#include <asm/debug.h>
+
+#define DBF_ERR                3       /* error conditions   */
+#define DBF_WARN       4       /* warning conditions */
+#define DBF_INFO       5       /* informational      */
+#define DBF_DEBUG      6       /* for debugging only */
+
+#define DBF_MAX_SPRINTF_ARGS 10
+
+#define VFIO_AP_DBF(...)                                       \
+       debug_sprintf_event(vfio_ap_dbf_info, ##__VA_ARGS__)
+#define VFIO_AP_DBF_ERR(...)                                   \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_ERR, ##__VA_ARGS__)
+#define VFIO_AP_DBF_WARN(...)                                  \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_WARN, ##__VA_ARGS__)
+#define VFIO_AP_DBF_INFO(...)                                  \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_INFO, ##__VA_ARGS__)
+#define VFIO_AP_DBF_DBG(...)                                   \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_DEBUG, ##__VA_ARGS__)
+
+extern debug_info_t *vfio_ap_dbf_info;
+
+#endif /* VFIO_AP_DEBUG_H */
index e043ae2..82b6ffe 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/string.h>
 #include <asm/facility.h>
 #include "vfio_ap_private.h"
+#include "vfio_ap_debug.h"
 
 #define VFIO_AP_ROOT_NAME "vfio_ap"
 #define VFIO_AP_DEV_NAME "matrix"
@@ -26,6 +27,7 @@ MODULE_DESCRIPTION("VFIO AP device driver, Copyright IBM Corp. 2018");
 MODULE_LICENSE("GPL v2");
 
 struct ap_matrix_dev *matrix_dev;
+debug_info_t *vfio_ap_dbf_info;
 
 /* Only type 10 adapters (CEX4 and later) are supported
  * by the AP matrix device driver
@@ -250,10 +252,28 @@ static void vfio_ap_matrix_dev_destroy(void)
        root_device_unregister(root_device);
 }
 
+static int __init vfio_ap_dbf_info_init(void)
+{
+       vfio_ap_dbf_info = debug_register("vfio_ap", 1, 1,
+                                         DBF_MAX_SPRINTF_ARGS * sizeof(long));
+
+       if (!vfio_ap_dbf_info)
+               return -ENOENT;
+
+       debug_register_view(vfio_ap_dbf_info, &debug_sprintf_view);
+       debug_set_level(vfio_ap_dbf_info, DBF_WARN);
+
+       return 0;
+}
+
 static int __init vfio_ap_init(void)
 {
        int ret;
 
+       ret = vfio_ap_dbf_info_init();
+       if (ret)
+               return ret;
+
        /* If there are no AP instructions, there is nothing to pass through. */
        if (!ap_instructions_available())
                return -ENODEV;
@@ -284,6 +304,7 @@ static void __exit vfio_ap_exit(void)
        vfio_ap_mdev_unregister();
        ap_driver_unregister(&vfio_ap_drv);
        vfio_ap_matrix_dev_destroy();
+       debug_unregister(vfio_ap_dbf_info);
 }
 
 module_init(vfio_ap_init);