s390-vfio-ap: introduces s390 kernel debug feature for vfio_ap device driver

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>
This commit is contained in:
Tony Krowiak 2021-10-26 16:58:31 -04:00 committed by Vasily Gorbik
parent dfd42facf1
commit a084c44eaa
2 changed files with 53 additions and 0 deletions

View File

@ -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 */

View File

@ -14,6 +14,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <asm/facility.h> #include <asm/facility.h>
#include "vfio_ap_private.h" #include "vfio_ap_private.h"
#include "vfio_ap_debug.h"
#define VFIO_AP_ROOT_NAME "vfio_ap" #define VFIO_AP_ROOT_NAME "vfio_ap"
#define VFIO_AP_DEV_NAME "matrix" #define VFIO_AP_DEV_NAME "matrix"
@ -26,6 +27,7 @@ MODULE_DESCRIPTION("VFIO AP device driver, Copyright IBM Corp. 2018");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
struct ap_matrix_dev *matrix_dev; struct ap_matrix_dev *matrix_dev;
debug_info_t *vfio_ap_dbf_info;
/* Only type 10 adapters (CEX4 and later) are supported /* Only type 10 adapters (CEX4 and later) are supported
* by the AP matrix device driver * by the AP matrix device driver
@ -250,10 +252,28 @@ static void vfio_ap_matrix_dev_destroy(void)
root_device_unregister(root_device); 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) static int __init vfio_ap_init(void)
{ {
int ret; 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 there are no AP instructions, there is nothing to pass through. */
if (!ap_instructions_available()) if (!ap_instructions_available())
return -ENODEV; return -ENODEV;
@ -284,6 +304,7 @@ static void __exit vfio_ap_exit(void)
vfio_ap_mdev_unregister(); vfio_ap_mdev_unregister();
ap_driver_unregister(&vfio_ap_drv); ap_driver_unregister(&vfio_ap_drv);
vfio_ap_matrix_dev_destroy(); vfio_ap_matrix_dev_destroy();
debug_unregister(vfio_ap_dbf_info);
} }
module_init(vfio_ap_init); module_init(vfio_ap_init);