hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/s390/cio/qdio_debug.c
....@@ -58,30 +58,16 @@
5858 mutex_unlock(&qdio_dbf_list_mutex);
5959 }
6060
61
-int qdio_allocate_dbf(struct qdio_initialize *init_data,
62
- struct qdio_irq *irq_ptr)
61
+int qdio_allocate_dbf(struct qdio_irq *irq_ptr)
6362 {
6463 char text[QDIO_DBF_NAME_LEN];
6564 struct qdio_dbf_entry *new_entry;
6665
67
- DBF_EVENT("qfmt:%1d", init_data->q_format);
68
- DBF_HEX(init_data->adapter_name, 8);
69
- DBF_EVENT("qpff%4x", init_data->qib_param_field_format);
70
- DBF_HEX(&init_data->qib_param_field, sizeof(void *));
71
- DBF_HEX(&init_data->input_slib_elements, sizeof(void *));
72
- DBF_HEX(&init_data->output_slib_elements, sizeof(void *));
73
- DBF_EVENT("niq:%1d noq:%1d", init_data->no_input_qs,
74
- init_data->no_output_qs);
75
- DBF_HEX(&init_data->input_handler, sizeof(void *));
76
- DBF_HEX(&init_data->output_handler, sizeof(void *));
77
- DBF_HEX(&init_data->int_parm, sizeof(long));
78
- DBF_HEX(&init_data->input_sbal_addr_array, sizeof(void *));
79
- DBF_HEX(&init_data->output_sbal_addr_array, sizeof(void *));
8066 DBF_EVENT("irq:%8lx", (unsigned long)irq_ptr);
8167
8268 /* allocate trace view for the interface */
8369 snprintf(text, QDIO_DBF_NAME_LEN, "qdio_%s",
84
- dev_name(&init_data->cdev->dev));
70
+ dev_name(&irq_ptr->cdev->dev));
8571 irq_ptr->debug_area = qdio_get_dbf_entry(text);
8672 if (irq_ptr->debug_area)
8773 DBF_DEV_EVENT(DBF_ERR, irq_ptr, "dbf reused");
....@@ -121,17 +107,15 @@
121107
122108 seq_printf(m, "Timestamp: %Lx Last AI: %Lx\n",
123109 q->timestamp, last_ai_time);
124
- seq_printf(m, "nr_used: %d ftc: %d last_move: %d\n",
125
- atomic_read(&q->nr_buf_used),
126
- q->first_to_check, q->last_move);
110
+ seq_printf(m, "nr_used: %d ftc: %d\n",
111
+ atomic_read(&q->nr_buf_used), q->first_to_check);
127112 if (q->is_input_q) {
128
- seq_printf(m, "polling: %d ack start: %d ack count: %d\n",
129
- q->u.in.polling, q->u.in.ack_start,
130
- q->u.in.ack_count);
131
- seq_printf(m, "DSCI: %d IRQs disabled: %u\n",
132
- *(u32 *)q->irq_ptr->dsci,
133
- test_bit(QDIO_QUEUE_IRQS_DISABLED,
134
- &q->u.in.queue_irq_state));
113
+ seq_printf(m, "batch start: %u batch count: %u\n",
114
+ q->u.in.batch_start, q->u.in.batch_count);
115
+ seq_printf(m, "DSCI: %x IRQs disabled: %u\n",
116
+ *(u8 *)q->irq_ptr->dsci,
117
+ test_bit(QDIO_IRQ_DISABLED,
118
+ &q->irq_ptr->poll_state));
135119 }
136120 seq_printf(m, "SBAL states:\n");
137121 seq_printf(m, "|0 |8 |16 |24 |32 |40 |48 |56 63|\n");
....@@ -181,7 +165,7 @@
181165 }
182166
183167 seq_printf(m, "\n1 2.. 4.. 8.. "
184
- "16.. 32.. 64.. 127\n");
168
+ "16.. 32.. 64.. 128\n");
185169 for (i = 0; i < ARRAY_SIZE(q->q_stats.nr_sbals); i++)
186170 seq_printf(m, "%-10u ", q->q_stats.nr_sbals[i]);
187171 seq_printf(m, "\nError NOP Total\n%-10u %-10u %-10u\n\n",
....@@ -190,19 +174,24 @@
190174 return 0;
191175 }
192176
193
-static int qstat_seq_open(struct inode *inode, struct file *filp)
177
+DEFINE_SHOW_ATTRIBUTE(qstat);
178
+
179
+static int ssqd_show(struct seq_file *m, void *v)
194180 {
195
- return single_open(filp, qstat_show,
196
- file_inode(filp)->i_private);
181
+ struct ccw_device *cdev = m->private;
182
+ struct qdio_ssqd_desc ssqd;
183
+ int rc;
184
+
185
+ rc = qdio_get_ssqd_desc(cdev, &ssqd);
186
+ if (rc)
187
+ return rc;
188
+
189
+ seq_hex_dump(m, "", DUMP_PREFIX_NONE, 16, 4, &ssqd, sizeof(ssqd),
190
+ false);
191
+ return 0;
197192 }
198193
199
-static const struct file_operations debugfs_fops = {
200
- .owner = THIS_MODULE,
201
- .open = qstat_seq_open,
202
- .read = seq_read,
203
- .llseek = seq_lseek,
204
- .release = single_release,
205
-};
194
+DEFINE_SHOW_ATTRIBUTE(ssqd);
206195
207196 static char *qperf_names[] = {
208197 "Assumed adapter interrupts",
....@@ -298,53 +287,37 @@
298287 .release = single_release,
299288 };
300289
301
-static void setup_debugfs_entry(struct qdio_q *q)
290
+static void setup_debugfs_entry(struct dentry *parent, struct qdio_q *q)
302291 {
303292 char name[QDIO_DEBUGFS_NAME_LEN];
304293
305294 snprintf(name, QDIO_DEBUGFS_NAME_LEN, "%s_%d",
306295 q->is_input_q ? "input" : "output",
307296 q->nr);
308
- q->debugfs_q = debugfs_create_file(name, S_IFREG | S_IRUGO | S_IWUSR,
309
- q->irq_ptr->debugfs_dev, q, &debugfs_fops);
310
- if (IS_ERR(q->debugfs_q))
311
- q->debugfs_q = NULL;
297
+ debugfs_create_file(name, 0444, parent, q, &qstat_fops);
312298 }
313299
314
-void qdio_setup_debug_entries(struct qdio_irq *irq_ptr, struct ccw_device *cdev)
300
+void qdio_setup_debug_entries(struct qdio_irq *irq_ptr)
315301 {
316302 struct qdio_q *q;
317303 int i;
318304
319
- irq_ptr->debugfs_dev = debugfs_create_dir(dev_name(&cdev->dev),
305
+ irq_ptr->debugfs_dev = debugfs_create_dir(dev_name(&irq_ptr->cdev->dev),
320306 debugfs_root);
321
- if (IS_ERR(irq_ptr->debugfs_dev))
322
- irq_ptr->debugfs_dev = NULL;
323
-
324
- irq_ptr->debugfs_perf = debugfs_create_file("statistics",
325
- S_IFREG | S_IRUGO | S_IWUSR,
326
- irq_ptr->debugfs_dev, irq_ptr,
327
- &debugfs_perf_fops);
328
- if (IS_ERR(irq_ptr->debugfs_perf))
329
- irq_ptr->debugfs_perf = NULL;
307
+ debugfs_create_file("statistics", S_IFREG | S_IRUGO | S_IWUSR,
308
+ irq_ptr->debugfs_dev, irq_ptr, &debugfs_perf_fops);
309
+ debugfs_create_file("ssqd", 0444, irq_ptr->debugfs_dev, irq_ptr->cdev,
310
+ &ssqd_fops);
330311
331312 for_each_input_queue(irq_ptr, q, i)
332
- setup_debugfs_entry(q);
313
+ setup_debugfs_entry(irq_ptr->debugfs_dev, q);
333314 for_each_output_queue(irq_ptr, q, i)
334
- setup_debugfs_entry(q);
315
+ setup_debugfs_entry(irq_ptr->debugfs_dev, q);
335316 }
336317
337318 void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr)
338319 {
339
- struct qdio_q *q;
340
- int i;
341
-
342
- for_each_input_queue(irq_ptr, q, i)
343
- debugfs_remove(q->debugfs_q);
344
- for_each_output_queue(irq_ptr, q, i)
345
- debugfs_remove(q->debugfs_q);
346
- debugfs_remove(irq_ptr->debugfs_perf);
347
- debugfs_remove(irq_ptr->debugfs_dev);
320
+ debugfs_remove_recursive(irq_ptr->debugfs_dev);
348321 }
349322
350323 int __init qdio_debug_init(void)
....@@ -366,7 +339,7 @@
366339 void qdio_debug_exit(void)
367340 {
368341 qdio_clear_dbf_list();
369
- debugfs_remove(debugfs_root);
342
+ debugfs_remove_recursive(debugfs_root);
370343 debug_unregister(qdio_dbf_setup);
371344 debug_unregister(qdio_dbf_error);
372345 }