diff options
author | Jan Glauber <jang@linux.vnet.ibm.com> | 2008-12-25 07:38:46 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-25 07:38:59 -0500 |
commit | 22f9934767f49012ffbae753b28b8055bd28348f (patch) | |
tree | 7cb58ceff25b9c6b5ade5646b6444b7689621f81 /drivers/s390/cio/qdio_debug.c | |
parent | 9a1ce28aeb7a8b1666eaa9f104c1a2f5a149f9df (diff) |
[S390] qdio: rework debug feature logging
- make qdio_trace a per device view
- remove s390dbf exceptions
- remove CONFIG_QDIO_DEBUG, not needed anymore if we check for the level
before calling sprintf
- use snprintf for dbf entries
- add start markers to see if the dbf view wrapped
- add a global error view for all queues
Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/qdio_debug.c')
-rw-r--r-- | drivers/s390/cio/qdio_debug.c | 97 |
1 files changed, 42 insertions, 55 deletions
diff --git a/drivers/s390/cio/qdio_debug.c b/drivers/s390/cio/qdio_debug.c index f05590355be8..0add07c1b5d2 100644 --- a/drivers/s390/cio/qdio_debug.c +++ b/drivers/s390/cio/qdio_debug.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include "qdio.h" | 14 | #include "qdio.h" |
15 | 15 | ||
16 | debug_info_t *qdio_dbf_setup; | 16 | debug_info_t *qdio_dbf_setup; |
17 | debug_info_t *qdio_dbf_trace; | 17 | debug_info_t *qdio_dbf_error; |
18 | 18 | ||
19 | static struct dentry *debugfs_root; | 19 | static struct dentry *debugfs_root; |
20 | #define MAX_DEBUGFS_QUEUES 32 | 20 | #define MAX_DEBUGFS_QUEUES 32 |
@@ -22,59 +22,33 @@ static struct dentry *debugfs_queues[MAX_DEBUGFS_QUEUES] = { NULL }; | |||
22 | static DEFINE_MUTEX(debugfs_mutex); | 22 | static DEFINE_MUTEX(debugfs_mutex); |
23 | #define QDIO_DEBUGFS_NAME_LEN 40 | 23 | #define QDIO_DEBUGFS_NAME_LEN 40 |
24 | 24 | ||
25 | void qdio_allocate_do_dbf(struct qdio_initialize *init_data) | 25 | void qdio_allocate_dbf(struct qdio_initialize *init_data, |
26 | struct qdio_irq *irq_ptr) | ||
26 | { | 27 | { |
27 | char dbf_text[20]; | 28 | char text[20]; |
28 | 29 | ||
29 | sprintf(dbf_text, "qfmt:%x", init_data->q_format); | 30 | DBF_EVENT("qfmt:%1d", init_data->q_format); |
30 | QDIO_DBF_TEXT0(0, setup, dbf_text); | 31 | DBF_HEX(init_data->adapter_name, 8); |
31 | QDIO_DBF_HEX0(0, setup, init_data->adapter_name, 8); | 32 | DBF_EVENT("qpff%4x", init_data->qib_param_field_format); |
32 | sprintf(dbf_text, "qpff%4x", init_data->qib_param_field_format); | 33 | DBF_HEX(&init_data->qib_param_field, sizeof(void *)); |
33 | QDIO_DBF_TEXT0(0, setup, dbf_text); | 34 | DBF_HEX(&init_data->input_slib_elements, sizeof(void *)); |
34 | QDIO_DBF_HEX0(0, setup, &init_data->qib_param_field, sizeof(void *)); | 35 | DBF_HEX(&init_data->output_slib_elements, sizeof(void *)); |
35 | QDIO_DBF_HEX0(0, setup, &init_data->input_slib_elements, sizeof(void *)); | 36 | DBF_EVENT("niq:%1d noq:%1d", init_data->no_input_qs, |
36 | QDIO_DBF_HEX0(0, setup, &init_data->output_slib_elements, sizeof(void *)); | 37 | init_data->no_output_qs); |
37 | sprintf(dbf_text, "niq:%4x", init_data->no_input_qs); | 38 | DBF_HEX(&init_data->input_handler, sizeof(void *)); |
38 | QDIO_DBF_TEXT0(0, setup, dbf_text); | 39 | DBF_HEX(&init_data->output_handler, sizeof(void *)); |
39 | sprintf(dbf_text, "noq:%4x", init_data->no_output_qs); | 40 | DBF_HEX(&init_data->int_parm, sizeof(long)); |
40 | QDIO_DBF_TEXT0(0, setup, dbf_text); | 41 | DBF_HEX(&init_data->flags, sizeof(long)); |
41 | QDIO_DBF_HEX0(0, setup, &init_data->input_handler, sizeof(void *)); | 42 | DBF_HEX(&init_data->input_sbal_addr_array, sizeof(void *)); |
42 | QDIO_DBF_HEX0(0, setup, &init_data->output_handler, sizeof(void *)); | 43 | DBF_HEX(&init_data->output_sbal_addr_array, sizeof(void *)); |
43 | QDIO_DBF_HEX0(0, setup, &init_data->int_parm, sizeof(long)); | 44 | DBF_EVENT("irq:%8lx", (unsigned long)irq_ptr); |
44 | QDIO_DBF_HEX0(0, setup, &init_data->flags, sizeof(long)); | 45 | |
45 | QDIO_DBF_HEX0(0, setup, &init_data->input_sbal_addr_array, sizeof(void *)); | 46 | /* allocate trace view for the interface */ |
46 | QDIO_DBF_HEX0(0, setup, &init_data->output_sbal_addr_array, sizeof(void *)); | 47 | snprintf(text, 20, "qdio_%s", dev_name(&init_data->cdev->dev)); |
47 | } | 48 | irq_ptr->debug_area = debug_register(text, 2, 1, 16); |
48 | 49 | debug_register_view(irq_ptr->debug_area, &debug_hex_ascii_view); | |
49 | static void qdio_unregister_dbf_views(void) | 50 | debug_set_level(irq_ptr->debug_area, DBF_WARN); |
50 | { | 51 | DBF_DEV_EVENT(DBF_ERR, irq_ptr, "dbf created"); |
51 | if (qdio_dbf_setup) | ||
52 | debug_unregister(qdio_dbf_setup); | ||
53 | if (qdio_dbf_trace) | ||
54 | debug_unregister(qdio_dbf_trace); | ||
55 | } | ||
56 | |||
57 | static int qdio_register_dbf_views(void) | ||
58 | { | ||
59 | qdio_dbf_setup = debug_register("qdio_setup", QDIO_DBF_SETUP_PAGES, | ||
60 | QDIO_DBF_SETUP_NR_AREAS, | ||
61 | QDIO_DBF_SETUP_LEN); | ||
62 | if (!qdio_dbf_setup) | ||
63 | goto oom; | ||
64 | debug_register_view(qdio_dbf_setup, &debug_hex_ascii_view); | ||
65 | debug_set_level(qdio_dbf_setup, QDIO_DBF_SETUP_LEVEL); | ||
66 | |||
67 | qdio_dbf_trace = debug_register("qdio_trace", QDIO_DBF_TRACE_PAGES, | ||
68 | QDIO_DBF_TRACE_NR_AREAS, | ||
69 | QDIO_DBF_TRACE_LEN); | ||
70 | if (!qdio_dbf_trace) | ||
71 | goto oom; | ||
72 | debug_register_view(qdio_dbf_trace, &debug_hex_ascii_view); | ||
73 | debug_set_level(qdio_dbf_trace, QDIO_DBF_TRACE_LEVEL); | ||
74 | return 0; | ||
75 | oom: | ||
76 | qdio_unregister_dbf_views(); | ||
77 | return -ENOMEM; | ||
78 | } | 52 | } |
79 | 53 | ||
80 | static int qstat_show(struct seq_file *m, void *v) | 54 | static int qstat_show(struct seq_file *m, void *v) |
@@ -223,11 +197,24 @@ void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr, struct ccw_device *cd | |||
223 | int __init qdio_debug_init(void) | 197 | int __init qdio_debug_init(void) |
224 | { | 198 | { |
225 | debugfs_root = debugfs_create_dir("qdio_queues", NULL); | 199 | debugfs_root = debugfs_create_dir("qdio_queues", NULL); |
226 | return qdio_register_dbf_views(); | 200 | |
201 | qdio_dbf_setup = debug_register("qdio_setup", 16, 1, 16); | ||
202 | debug_register_view(qdio_dbf_setup, &debug_hex_ascii_view); | ||
203 | debug_set_level(qdio_dbf_setup, DBF_INFO); | ||
204 | DBF_EVENT("dbf created\n"); | ||
205 | |||
206 | qdio_dbf_error = debug_register("qdio_error", 4, 1, 16); | ||
207 | debug_register_view(qdio_dbf_error, &debug_hex_ascii_view); | ||
208 | debug_set_level(qdio_dbf_error, DBF_INFO); | ||
209 | DBF_ERROR("dbf created\n"); | ||
210 | return 0; | ||
227 | } | 211 | } |
228 | 212 | ||
229 | void qdio_debug_exit(void) | 213 | void qdio_debug_exit(void) |
230 | { | 214 | { |
231 | debugfs_remove(debugfs_root); | 215 | debugfs_remove(debugfs_root); |
232 | qdio_unregister_dbf_views(); | 216 | if (qdio_dbf_setup) |
217 | debug_unregister(qdio_dbf_setup); | ||
218 | if (qdio_dbf_error) | ||
219 | debug_unregister(qdio_dbf_error); | ||
233 | } | 220 | } |