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:
Родитель
dfd42facf1
Коммит
a084c44eaa
|
@ -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 */
|
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче