Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Jan Glauber and committed by
Martin Schwidefsky
22f99347 9a1ce28a

+243 -448
-10
arch/s390/Kconfig
··· 347 347 348 348 If unsure, say Y. 349 349 350 - config QDIO_DEBUG 351 - bool "Extended debugging information" 352 - depends on QDIO 353 - help 354 - Say Y here to get extended debugging output in 355 - /sys/kernel/debug/s390dbf/qdio... 356 - Warning: this option reduces the performance of the QDIO module. 357 - 358 - If unsure, say N. 359 - 360 350 config CHSC_SCH 361 351 tristate "Support for CHSC subchannels" 362 352 help
+3
drivers/s390/cio/qdio.h
··· 10 10 11 11 #include <asm/page.h> 12 12 #include <asm/schid.h> 13 + #include <asm/debug.h> 13 14 #include "chsc.h" 14 15 15 16 #define QDIO_BUSY_BIT_PATIENCE 100 /* 100 microseconds */ ··· 301 300 struct qdio_q *input_qs[QDIO_MAX_QUEUES_PER_IRQ]; 302 301 struct qdio_q *output_qs[QDIO_MAX_QUEUES_PER_IRQ]; 303 302 303 + debug_info_t *debug_area; 304 304 struct mutex setup_mutex; 305 305 }; 306 306 307 307 /* helper functions */ 308 308 #define queue_type(q) q->irq_ptr->qib.qfmt 309 + #define SCH_NO(q) (q->irq_ptr->schid.sch_no) 309 310 310 311 #define is_thinint_irq(irq) \ 311 312 (irq->qib.qfmt == QDIO_IQDIO_QFMT || \
+40 -53
drivers/s390/cio/qdio_debug.c
··· 14 14 #include "qdio.h" 15 15 16 16 debug_info_t *qdio_dbf_setup; 17 - debug_info_t *qdio_dbf_trace; 17 + debug_info_t *qdio_dbf_error; 18 18 19 19 static struct dentry *debugfs_root; 20 20 #define MAX_DEBUGFS_QUEUES 32 ··· 22 22 static DEFINE_MUTEX(debugfs_mutex); 23 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 - QDIO_DBF_TEXT0(0, setup, dbf_text); 31 - QDIO_DBF_HEX0(0, setup, init_data->adapter_name, 8); 32 - sprintf(dbf_text, "qpff%4x", init_data->qib_param_field_format); 33 - QDIO_DBF_TEXT0(0, setup, dbf_text); 34 - QDIO_DBF_HEX0(0, setup, &init_data->qib_param_field, sizeof(void *)); 35 - QDIO_DBF_HEX0(0, setup, &init_data->input_slib_elements, sizeof(void *)); 36 - QDIO_DBF_HEX0(0, setup, &init_data->output_slib_elements, sizeof(void *)); 37 - sprintf(dbf_text, "niq:%4x", init_data->no_input_qs); 38 - QDIO_DBF_TEXT0(0, setup, dbf_text); 39 - sprintf(dbf_text, "noq:%4x", init_data->no_output_qs); 40 - QDIO_DBF_TEXT0(0, setup, dbf_text); 41 - QDIO_DBF_HEX0(0, setup, &init_data->input_handler, sizeof(void *)); 42 - QDIO_DBF_HEX0(0, setup, &init_data->output_handler, sizeof(void *)); 43 - QDIO_DBF_HEX0(0, setup, &init_data->int_parm, sizeof(long)); 44 - QDIO_DBF_HEX0(0, setup, &init_data->flags, sizeof(long)); 45 - QDIO_DBF_HEX0(0, setup, &init_data->input_sbal_addr_array, sizeof(void *)); 46 - QDIO_DBF_HEX0(0, setup, &init_data->output_sbal_addr_array, sizeof(void *)); 47 - } 30 + DBF_EVENT("qfmt:%1d", init_data->q_format); 31 + DBF_HEX(init_data->adapter_name, 8); 32 + DBF_EVENT("qpff%4x", init_data->qib_param_field_format); 33 + DBF_HEX(&init_data->qib_param_field, sizeof(void *)); 34 + DBF_HEX(&init_data->input_slib_elements, sizeof(void *)); 35 + DBF_HEX(&init_data->output_slib_elements, sizeof(void *)); 36 + DBF_EVENT("niq:%1d noq:%1d", init_data->no_input_qs, 37 + init_data->no_output_qs); 38 + DBF_HEX(&init_data->input_handler, sizeof(void *)); 39 + DBF_HEX(&init_data->output_handler, sizeof(void *)); 40 + DBF_HEX(&init_data->int_parm, sizeof(long)); 41 + DBF_HEX(&init_data->flags, sizeof(long)); 42 + DBF_HEX(&init_data->input_sbal_addr_array, sizeof(void *)); 43 + DBF_HEX(&init_data->output_sbal_addr_array, sizeof(void *)); 44 + DBF_EVENT("irq:%8lx", (unsigned long)irq_ptr); 48 45 49 - static void qdio_unregister_dbf_views(void) 50 - { 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; 46 + /* allocate trace view for the interface */ 47 + snprintf(text, 20, "qdio_%s", dev_name(&init_data->cdev->dev)); 48 + irq_ptr->debug_area = debug_register(text, 2, 1, 16); 49 + debug_register_view(irq_ptr->debug_area, &debug_hex_ascii_view); 50 + debug_set_level(irq_ptr->debug_area, DBF_WARN); 51 + DBF_DEV_EVENT(DBF_ERR, irq_ptr, "dbf created"); 78 52 } 79 53 80 54 static int qstat_show(struct seq_file *m, void *v) ··· 197 223 int __init qdio_debug_init(void) 198 224 { 199 225 debugfs_root = debugfs_create_dir("qdio_queues", NULL); 200 - return qdio_register_dbf_views(); 226 + 227 + qdio_dbf_setup = debug_register("qdio_setup", 16, 1, 16); 228 + debug_register_view(qdio_dbf_setup, &debug_hex_ascii_view); 229 + debug_set_level(qdio_dbf_setup, DBF_INFO); 230 + DBF_EVENT("dbf created\n"); 231 + 232 + qdio_dbf_error = debug_register("qdio_error", 4, 1, 16); 233 + debug_register_view(qdio_dbf_error, &debug_hex_ascii_view); 234 + debug_set_level(qdio_dbf_error, DBF_INFO); 235 + DBF_ERROR("dbf created\n"); 236 + return 0; 201 237 } 202 238 203 239 void qdio_debug_exit(void) 204 240 { 205 241 debugfs_remove(debugfs_root); 206 - qdio_unregister_dbf_views(); 242 + if (qdio_dbf_setup) 243 + debug_unregister(qdio_dbf_setup); 244 + if (qdio_dbf_error) 245 + debug_unregister(qdio_dbf_error); 207 246 }
+59 -67
drivers/s390/cio/qdio_debug.h
··· 12 12 #include <asm/qdio.h> 13 13 #include "qdio.h" 14 14 15 - #define QDIO_DBF_HEX(ex, name, level, addr, len) \ 16 - do { \ 17 - if (ex) \ 18 - debug_exception(qdio_dbf_##name, level, (void *)(addr), len); \ 19 - else \ 20 - debug_event(qdio_dbf_##name, level, (void *)(addr), len); \ 21 - } while (0) 22 - #define QDIO_DBF_TEXT(ex, name, level, text) \ 23 - do { \ 24 - if (ex) \ 25 - debug_text_exception(qdio_dbf_##name, level, text); \ 26 - else \ 27 - debug_text_event(qdio_dbf_##name, level, text); \ 28 - } while (0) 29 - 30 - #define QDIO_DBF_HEX0(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 0, addr, len) 31 - #define QDIO_DBF_HEX1(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 1, addr, len) 32 - #define QDIO_DBF_HEX2(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 2, addr, len) 33 - 34 - #ifdef CONFIG_QDIO_DEBUG 35 - #define QDIO_DBF_HEX3(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 3, addr, len) 36 - #define QDIO_DBF_HEX4(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 4, addr, len) 37 - #define QDIO_DBF_HEX5(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 5, addr, len) 38 - #define QDIO_DBF_HEX6(ex, name, addr, len) QDIO_DBF_HEX(ex, name, 6, addr, len) 39 - #else 40 - #define QDIO_DBF_HEX3(ex, name, addr, len) do {} while (0) 41 - #define QDIO_DBF_HEX4(ex, name, addr, len) do {} while (0) 42 - #define QDIO_DBF_HEX5(ex, name, addr, len) do {} while (0) 43 - #define QDIO_DBF_HEX6(ex, name, addr, len) do {} while (0) 44 - #endif /* CONFIG_QDIO_DEBUG */ 45 - 46 - #define QDIO_DBF_TEXT0(ex, name, text) QDIO_DBF_TEXT(ex, name, 0, text) 47 - #define QDIO_DBF_TEXT1(ex, name, text) QDIO_DBF_TEXT(ex, name, 1, text) 48 - #define QDIO_DBF_TEXT2(ex, name, text) QDIO_DBF_TEXT(ex, name, 2, text) 49 - 50 - #ifdef CONFIG_QDIO_DEBUG 51 - #define QDIO_DBF_TEXT3(ex, name, text) QDIO_DBF_TEXT(ex, name, 3, text) 52 - #define QDIO_DBF_TEXT4(ex, name, text) QDIO_DBF_TEXT(ex, name, 4, text) 53 - #define QDIO_DBF_TEXT5(ex, name, text) QDIO_DBF_TEXT(ex, name, 5, text) 54 - #define QDIO_DBF_TEXT6(ex, name, text) QDIO_DBF_TEXT(ex, name, 6, text) 55 - #else 56 - #define QDIO_DBF_TEXT3(ex, name, text) do {} while (0) 57 - #define QDIO_DBF_TEXT4(ex, name, text) do {} while (0) 58 - #define QDIO_DBF_TEXT5(ex, name, text) do {} while (0) 59 - #define QDIO_DBF_TEXT6(ex, name, text) do {} while (0) 60 - #endif /* CONFIG_QDIO_DEBUG */ 61 - 62 - /* s390dbf views */ 63 - #define QDIO_DBF_SETUP_LEN 8 64 - #define QDIO_DBF_SETUP_PAGES 8 65 - #define QDIO_DBF_SETUP_NR_AREAS 1 66 - 67 - #define QDIO_DBF_TRACE_LEN 8 68 - #define QDIO_DBF_TRACE_NR_AREAS 2 69 - 70 - #ifdef CONFIG_QDIO_DEBUG 71 - #define QDIO_DBF_TRACE_PAGES 32 72 - #define QDIO_DBF_SETUP_LEVEL 6 73 - #define QDIO_DBF_TRACE_LEVEL 4 74 - #else /* !CONFIG_QDIO_DEBUG */ 75 - #define QDIO_DBF_TRACE_PAGES 8 76 - #define QDIO_DBF_SETUP_LEVEL 2 77 - #define QDIO_DBF_TRACE_LEVEL 2 78 - #endif /* CONFIG_QDIO_DEBUG */ 15 + /* that gives us 15 characters in the text event views */ 16 + #define QDIO_DBF_LEN 16 79 17 80 18 extern debug_info_t *qdio_dbf_setup; 81 - extern debug_info_t *qdio_dbf_trace; 19 + extern debug_info_t *qdio_dbf_error; 82 20 83 - void qdio_allocate_do_dbf(struct qdio_initialize *init_data); 84 - void debug_print_bstat(struct qdio_q *q); 21 + /* sort out low debug levels early to avoid wasted sprints */ 22 + static inline int qdio_dbf_passes(debug_info_t *dbf_grp, int level) 23 + { 24 + return (level <= dbf_grp->level); 25 + } 26 + 27 + #define DBF_ERR 3 /* error conditions */ 28 + #define DBF_WARN 4 /* warning conditions */ 29 + #define DBF_INFO 6 /* informational */ 30 + 31 + #undef DBF_EVENT 32 + #undef DBF_ERROR 33 + #undef DBF_DEV_EVENT 34 + 35 + #define DBF_EVENT(text...) \ 36 + do { \ 37 + char debug_buffer[QDIO_DBF_LEN]; \ 38 + snprintf(debug_buffer, QDIO_DBF_LEN, text); \ 39 + debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \ 40 + } while (0) 41 + 42 + #define DBF_HEX(addr, len) \ 43 + do { \ 44 + debug_event(qdio_dbf_setup, DBF_ERR, (void*)(addr), len); \ 45 + } while (0) 46 + 47 + #define DBF_ERROR(text...) \ 48 + do { \ 49 + char debug_buffer[QDIO_DBF_LEN]; \ 50 + snprintf(debug_buffer, QDIO_DBF_LEN, text); \ 51 + debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \ 52 + } while (0) 53 + 54 + #define DBF_ERROR_HEX(addr, len) \ 55 + do { \ 56 + debug_event(qdio_dbf_error, DBF_ERR, (void*)(addr), len); \ 57 + } while (0) 58 + 59 + 60 + #define DBF_DEV_EVENT(level, device, text...) \ 61 + do { \ 62 + char debug_buffer[QDIO_DBF_LEN]; \ 63 + if (qdio_dbf_passes(device->debug_area, level)) { \ 64 + snprintf(debug_buffer, QDIO_DBF_LEN, text); \ 65 + debug_text_event(device->debug_area, level, debug_buffer); \ 66 + } \ 67 + } while (0) 68 + 69 + #define DBF_DEV_HEX(level, device, addr, len) \ 70 + do { \ 71 + debug_event(device->debug_area, level, (void*)(addr), len); \ 72 + } while (0) 73 + 74 + void qdio_allocate_dbf(struct qdio_initialize *init_data, 75 + struct qdio_irq *irq_ptr); 85 76 void qdio_setup_debug_entries(struct qdio_irq *irq_ptr, 86 77 struct ccw_device *cdev); 87 78 void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr, 88 79 struct ccw_device *cdev); 89 80 int qdio_debug_init(void); 90 81 void qdio_debug_exit(void); 82 + 91 83 #endif
+95 -229
drivers/s390/cio/qdio_main.c
··· 95 95 96 96 static inline int qdio_check_ccq(struct qdio_q *q, unsigned int ccq) 97 97 { 98 - char dbf_text[15]; 99 - 100 98 /* all done or next buffer state different */ 101 99 if (ccq == 0 || ccq == 32) 102 100 return 0; ··· 102 104 if (ccq == 96 || ccq == 97) 103 105 return 1; 104 106 /* notify devices immediately */ 105 - sprintf(dbf_text, "%d", ccq); 106 - QDIO_DBF_TEXT2(1, trace, dbf_text); 107 + DBF_ERROR("%4x ccq:%3d", SCH_NO(q), ccq); 107 108 return -EIO; 108 109 } 109 110 ··· 123 126 int tmp_count = count, tmp_start = start; 124 127 int nr = q->nr; 125 128 int rc; 126 - char dbf_text[15]; 127 129 128 130 BUG_ON(!q->irq_ptr->sch_token); 129 131 qdio_perf_stat_inc(&perf_stats.debug_eqbs_all); ··· 140 144 qdio_perf_stat_inc(&perf_stats.debug_eqbs_incomplete); 141 145 return (count - tmp_count); 142 146 } 147 + 143 148 if (rc == 1) { 144 - QDIO_DBF_TEXT5(1, trace, "eqAGAIN"); 149 + DBF_DEV_EVENT(DBF_WARN, q->irq_ptr, "EQBS again:%2d", ccq); 145 150 goto again; 146 151 } 147 152 148 153 if (rc < 0) { 149 - QDIO_DBF_TEXT2(1, trace, "eqberr"); 150 - sprintf(dbf_text, "%2x,%2x,%d,%d", count, tmp_count, ccq, nr); 151 - QDIO_DBF_TEXT2(1, trace, dbf_text); 154 + DBF_ERROR("%4x EQBS ERROR", SCH_NO(q)); 155 + DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 152 156 q->handler(q->irq_ptr->cdev, 153 157 QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 154 158 0, -1, -1, q->irq_ptr->int_parm); ··· 175 179 int tmp_count = count, tmp_start = start; 176 180 int nr = q->nr; 177 181 int rc; 178 - char dbf_text[15]; 179 182 180 183 BUG_ON(!q->irq_ptr->sch_token); 181 184 qdio_perf_stat_inc(&perf_stats.debug_sqbs_all); ··· 185 190 ccq = do_sqbs(q->irq_ptr->sch_token, state, nr, &tmp_start, &tmp_count); 186 191 rc = qdio_check_ccq(q, ccq); 187 192 if (rc == 1) { 188 - QDIO_DBF_TEXT5(1, trace, "sqAGAIN"); 193 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "SQBS again:%2d", ccq); 189 194 qdio_perf_stat_inc(&perf_stats.debug_sqbs_incomplete); 190 195 goto again; 191 196 } 192 197 if (rc < 0) { 193 - QDIO_DBF_TEXT3(1, trace, "sqberr"); 194 - sprintf(dbf_text, "%2x,%2x", count, tmp_count); 195 - QDIO_DBF_TEXT3(1, trace, dbf_text); 196 - sprintf(dbf_text, "%d,%d", ccq, nr); 197 - QDIO_DBF_TEXT3(1, trace, dbf_text); 198 - 198 + DBF_ERROR("%4x SQBS ERROR", SCH_NO(q)); 199 + DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 199 200 q->handler(q->irq_ptr->cdev, 200 201 QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 201 202 0, -1, -1, q->irq_ptr->int_parm); ··· 278 287 if (!need_siga_sync(q)) 279 288 return 0; 280 289 290 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-s:"); 291 + DBF_DEV_HEX(DBF_INFO, q->irq_ptr, q, sizeof(void *)); 281 292 qdio_perf_stat_inc(&perf_stats.siga_sync); 282 293 283 294 cc = do_siga_sync(q->irq_ptr->schid, output, input); 284 - if (cc) { 285 - QDIO_DBF_TEXT4(0, trace, "sigasync"); 286 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 287 - QDIO_DBF_HEX3(0, trace, &cc, sizeof(int *)); 288 - } 295 + if (cc) 296 + DBF_ERROR("%4x SIGA-S:%2d", SCH_NO(q), cc); 289 297 return cc; 290 298 } 291 299 ··· 328 338 int cc; 329 339 u32 busy_bit; 330 340 u64 start_time = 0; 331 - char dbf_text[15]; 332 341 333 - QDIO_DBF_TEXT5(0, trace, "sigaout"); 334 - QDIO_DBF_HEX5(0, trace, &q, sizeof(void *)); 335 - 342 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-w:%1d", q->nr); 336 343 qdio_perf_stat_inc(&perf_stats.siga_out); 337 344 again: 338 345 cc = qdio_do_siga_output(q, &busy_bit); 339 346 if (queue_type(q) == QDIO_IQDIO_QFMT && cc == 2 && busy_bit) { 340 - sprintf(dbf_text, "bb%4x%2x", q->irq_ptr->schid.sch_no, q->nr); 341 - QDIO_DBF_TEXT3(0, trace, dbf_text); 347 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-w bb:%2d", q->nr); 342 348 343 349 if (!start_time) 344 350 start_time = get_usecs(); ··· 345 359 if (cc == 2 && busy_bit) 346 360 cc |= QDIO_ERROR_SIGA_BUSY; 347 361 if (cc) 348 - QDIO_DBF_HEX3(0, trace, &cc, sizeof(int *)); 362 + DBF_ERROR("%4x SIGA-W:%2d", SCH_NO(q), cc); 349 363 return cc; 350 364 } 351 365 ··· 353 367 { 354 368 int cc; 355 369 356 - QDIO_DBF_TEXT4(0, trace, "sigain"); 357 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 358 - 370 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "siga-r:%1d", q->nr); 359 371 qdio_perf_stat_inc(&perf_stats.siga_in); 360 372 361 373 cc = do_siga_input(q->irq_ptr->schid, q->mask); 362 374 if (cc) 363 - QDIO_DBF_HEX3(0, trace, &cc, sizeof(int *)); 375 + DBF_ERROR("%4x SIGA-R:%2d", SCH_NO(q), cc); 364 376 return cc; 365 377 } 366 378 ··· 391 407 392 408 static void announce_buffer_error(struct qdio_q *q) 393 409 { 394 - char dbf_text[15]; 395 - 396 - if (q->is_input_q) 397 - QDIO_DBF_TEXT3(1, trace, "inperr"); 398 - else 399 - QDIO_DBF_TEXT3(0, trace, "outperr"); 400 - 401 - sprintf(dbf_text, "%x-%x-%x", q->first_to_check, 402 - q->sbal[q->first_to_check]->element[14].flags, 403 - q->sbal[q->first_to_check]->element[15].flags); 404 - QDIO_DBF_TEXT3(1, trace, dbf_text); 405 - QDIO_DBF_HEX2(1, trace, q->sbal[q->first_to_check], 256); 410 + DBF_ERROR("%4x BUF ERROR", SCH_NO(q)); 411 + DBF_ERROR((q->is_input_q) ? "IN:%2d" : "OUT:%2d", q->nr); 412 + DBF_ERROR("FTC:%3d", q->first_to_check); 413 + DBF_ERROR("F14:%2x F15:%2x", 414 + q->sbal[q->first_to_check]->element[14].flags & 0xff, 415 + q->sbal[q->first_to_check]->element[15].flags & 0xff); 406 416 407 417 q->qdio_error = QDIO_ERROR_SLSB_STATE; 408 418 } ··· 439 461 440 462 switch (state) { 441 463 case SLSB_P_INPUT_PRIMED: 442 - QDIO_DBF_TEXT5(0, trace, "inptprim"); 464 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in prim: %3d", count); 443 465 444 466 /* 445 467 * Only ACK the first buffer. The ACK will be removed in ··· 478 500 case SLSB_CU_INPUT_EMPTY: 479 501 case SLSB_P_INPUT_NOT_INIT: 480 502 case SLSB_P_INPUT_ACK: 481 - QDIO_DBF_TEXT5(0, trace, "inpnipro"); 503 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in nop"); 482 504 break; 483 505 default: 484 506 BUG(); 485 507 } 486 508 out: 487 - QDIO_DBF_HEX4(0, trace, &q->first_to_check, sizeof(int)); 488 509 return q->first_to_check; 489 510 } 490 511 ··· 497 520 if (!need_siga_sync(q) && !pci_out_supported(q)) 498 521 q->u.in.timestamp = get_usecs(); 499 522 500 - QDIO_DBF_TEXT4(0, trace, "inhasmvd"); 501 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 523 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in moved"); 502 524 return 1; 503 525 } else 504 526 return 0; ··· 506 530 static int qdio_inbound_q_done(struct qdio_q *q) 507 531 { 508 532 unsigned char state = 0; 509 - #ifdef CONFIG_QDIO_DEBUG 510 - char dbf_text[15]; 511 - #endif 512 533 513 534 if (!atomic_read(&q->nr_buf_used)) 514 535 return 1; ··· 530 557 * has (probably) not moved (see qdio_inbound_processing). 531 558 */ 532 559 if (get_usecs() > q->u.in.timestamp + QDIO_INPUT_THRESHOLD) { 533 - #ifdef CONFIG_QDIO_DEBUG 534 - QDIO_DBF_TEXT4(0, trace, "inqisdon"); 535 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 536 - sprintf(dbf_text, "pf%02x", q->first_to_check); 537 - QDIO_DBF_TEXT4(0, trace, dbf_text); 538 - #endif /* CONFIG_QDIO_DEBUG */ 560 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in done:%3d", 561 + q->first_to_check); 539 562 return 1; 540 563 } else { 541 - #ifdef CONFIG_QDIO_DEBUG 542 - QDIO_DBF_TEXT4(0, trace, "inqisntd"); 543 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 544 - sprintf(dbf_text, "pf%02x", q->first_to_check); 545 - QDIO_DBF_TEXT4(0, trace, dbf_text); 546 - #endif /* CONFIG_QDIO_DEBUG */ 564 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in notd:%3d", 565 + q->first_to_check); 547 566 return 0; 548 567 } 549 568 } ··· 543 578 void qdio_kick_inbound_handler(struct qdio_q *q) 544 579 { 545 580 int count, start, end; 546 - #ifdef CONFIG_QDIO_DEBUG 547 - char dbf_text[15]; 548 - #endif 549 581 550 582 qdio_perf_stat_inc(&perf_stats.inbound_handler); 551 583 ··· 553 591 else 554 592 count = end + QDIO_MAX_BUFFERS_PER_Q - start; 555 593 556 - #ifdef CONFIG_QDIO_DEBUG 557 - sprintf(dbf_text, "s=%2xc=%2x", start, count); 558 - QDIO_DBF_TEXT4(0, trace, dbf_text); 559 - #endif /* CONFIG_QDIO_DEBUG */ 594 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "kih s:%3d c:%3d", start, count); 560 595 561 596 if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE)) 562 597 return; ··· 626 667 switch (state) { 627 668 case SLSB_P_OUTPUT_EMPTY: 628 669 /* the adapter got it */ 629 - QDIO_DBF_TEXT5(0, trace, "outpempt"); 670 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out empty:%1d %3d", q->nr, count); 630 671 631 672 atomic_sub(count, &q->nr_buf_used); 632 673 q->first_to_check = add_buf(q->first_to_check, count); ··· 645 686 break; 646 687 case SLSB_CU_OUTPUT_PRIMED: 647 688 /* the adapter has not fetched the output yet */ 648 - QDIO_DBF_TEXT5(0, trace, "outpprim"); 689 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out primed:%1d", q->nr); 649 690 break; 650 691 case SLSB_P_OUTPUT_NOT_INIT: 651 692 case SLSB_P_OUTPUT_HALTED: ··· 670 711 671 712 if ((bufnr != q->last_move_ftc) || q->qdio_error) { 672 713 q->last_move_ftc = bufnr; 673 - QDIO_DBF_TEXT4(0, trace, "oqhasmvd"); 674 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 714 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out moved:%1d", q->nr); 675 715 return 1; 676 716 } else 677 717 return 0; ··· 705 747 static void qdio_kick_outbound_q(struct qdio_q *q) 706 748 { 707 749 int rc; 708 - #ifdef CONFIG_QDIO_DEBUG 709 - char dbf_text[15]; 710 750 711 - QDIO_DBF_TEXT5(0, trace, "kickoutq"); 712 - QDIO_DBF_HEX5(0, trace, &q, sizeof(void *)); 713 - #endif /* CONFIG_QDIO_DEBUG */ 751 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "kickoutq:%1d", q->nr); 714 752 715 753 if (!need_siga_out(q)) 716 754 return; ··· 715 761 switch (rc) { 716 762 case 0: 717 763 /* TODO: improve error handling for CC=0 case */ 718 - #ifdef CONFIG_QDIO_DEBUG 719 - if (q->u.out.timestamp) { 720 - QDIO_DBF_TEXT3(0, trace, "cc2reslv"); 721 - sprintf(dbf_text, "%4x%2x%2x", q->irq_ptr->schid.sch_no, 722 - q->nr, 723 - atomic_read(&q->u.out.busy_siga_counter)); 724 - QDIO_DBF_TEXT3(0, trace, dbf_text); 725 - } 726 - #endif /* CONFIG_QDIO_DEBUG */ 764 + if (q->u.out.timestamp) 765 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "cc2 rslv:%4x", 766 + atomic_read(&q->u.out.busy_siga_counter)); 727 767 /* went smooth this time, reset timestamp */ 728 768 q->u.out.timestamp = 0; 729 769 break; ··· 734 786 tasklet_schedule(&q->tasklet); 735 787 break; 736 788 } 737 - QDIO_DBF_TEXT2(0, trace, "cc2REPRT"); 738 - #ifdef CONFIG_QDIO_DEBUG 739 - sprintf(dbf_text, "%4x%2x%2x", q->irq_ptr->schid.sch_no, q->nr, 740 - atomic_read(&q->u.out.busy_siga_counter)); 741 - QDIO_DBF_TEXT3(0, trace, dbf_text); 742 - #endif /* CONFIG_QDIO_DEBUG */ 789 + DBF_ERROR("%4x cc2 REP:%1d", SCH_NO(q), q->nr); 743 790 default: 744 791 /* for plain cc=1, 2 or 3 */ 745 792 q->qdio_error = rc; ··· 744 801 static void qdio_kick_outbound_handler(struct qdio_q *q) 745 802 { 746 803 int start, end, count; 747 - #ifdef CONFIG_QDIO_DEBUG 748 - char dbf_text[15]; 749 - #endif 750 804 751 805 start = q->first_to_kick; 752 806 end = q->last_move_ftc; ··· 752 812 else 753 813 count = end + QDIO_MAX_BUFFERS_PER_Q - start; 754 814 755 - #ifdef CONFIG_QDIO_DEBUG 756 - QDIO_DBF_TEXT4(0, trace, "kickouth"); 757 - QDIO_DBF_HEX4(0, trace, &q, sizeof(void *)); 758 - 759 - sprintf(dbf_text, "s=%2xc=%2x", start, count); 760 - QDIO_DBF_TEXT4(0, trace, dbf_text); 761 - #endif /* CONFIG_QDIO_DEBUG */ 815 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "kickouth: %1d", q->nr); 816 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "s:%3d c:%3d", start, count); 762 817 763 818 if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE)) 764 819 return; ··· 848 913 static inline void qdio_set_state(struct qdio_irq *irq_ptr, 849 914 enum qdio_irq_states state) 850 915 { 851 - #ifdef CONFIG_QDIO_DEBUG 852 - char dbf_text[15]; 853 - 854 - QDIO_DBF_TEXT5(0, trace, "newstate"); 855 - sprintf(dbf_text, "%4x%4x", irq_ptr->schid.sch_no, state); 856 - QDIO_DBF_TEXT5(0, trace, dbf_text); 857 - #endif /* CONFIG_QDIO_DEBUG */ 916 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "newstate: %1d", state); 858 917 859 918 irq_ptr->state = state; 860 919 mb(); 861 920 } 862 921 863 - static void qdio_irq_check_sense(struct subchannel_id schid, struct irb *irb) 922 + static void qdio_irq_check_sense(struct qdio_irq *irq_ptr, struct irb *irb) 864 923 { 865 - char dbf_text[15]; 866 - 867 924 if (irb->esw.esw0.erw.cons) { 868 - sprintf(dbf_text, "sens%4x", schid.sch_no); 869 - QDIO_DBF_TEXT2(1, trace, dbf_text); 870 - QDIO_DBF_HEX0(0, trace, irb, 64); 871 - QDIO_DBF_HEX0(0, trace, irb->ecw, 64); 925 + DBF_ERROR("%4x sense:", irq_ptr->schid.sch_no); 926 + DBF_ERROR_HEX(irb, 64); 927 + DBF_ERROR_HEX(irb->ecw, 64); 872 928 } 873 929 } 874 930 ··· 893 967 { 894 968 struct qdio_irq *irq_ptr = cdev->private->qdio_data; 895 969 struct qdio_q *q; 896 - char dbf_text[15]; 897 970 898 - QDIO_DBF_TEXT2(1, trace, "ick2"); 899 - sprintf(dbf_text, "%s", dev_name(&cdev->dev)); 900 - QDIO_DBF_TEXT2(1, trace, dbf_text); 901 - QDIO_DBF_HEX2(0, trace, &intparm, sizeof(int)); 902 - QDIO_DBF_HEX2(0, trace, &dstat, sizeof(int)); 903 - QDIO_DBF_HEX2(0, trace, &cstat, sizeof(int)); 971 + DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no); 972 + DBF_ERROR("intp :%lx", intparm); 973 + DBF_ERROR("ds: %2x cs:%2x", dstat, cstat); 904 974 905 975 if (irq_ptr->nr_input_qs) { 906 976 q = irq_ptr->input_qs[0]; ··· 949 1027 } 950 1028 951 1029 static int qdio_establish_check_errors(struct ccw_device *cdev, int cstat, 952 - int dstat) 1030 + int dstat) 953 1031 { 954 1032 struct qdio_irq *irq_ptr = cdev->private->qdio_data; 955 1033 956 1034 if (cstat || (dstat & ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END))) { 957 - QDIO_DBF_TEXT2(1, setup, "eq:ckcon"); 1035 + DBF_ERROR("EQ:ck con"); 958 1036 goto error; 959 1037 } 960 1038 961 1039 if (!(dstat & DEV_STAT_DEV_END)) { 962 - QDIO_DBF_TEXT2(1, setup, "eq:no de"); 1040 + DBF_ERROR("EQ:no dev"); 963 1041 goto error; 964 1042 } 965 1043 966 1044 if (dstat & ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) { 967 - QDIO_DBF_TEXT2(1, setup, "eq:badio"); 1045 + DBF_ERROR("EQ: bad io"); 968 1046 goto error; 969 1047 } 970 1048 return 0; 971 1049 error: 972 - QDIO_DBF_HEX2(0, trace, &cstat, sizeof(int)); 973 - QDIO_DBF_HEX2(0, trace, &dstat, sizeof(int)); 1050 + DBF_ERROR("%4x EQ:error", irq_ptr->schid.sch_no); 1051 + DBF_ERROR("ds: %2x cs:%2x", dstat, cstat); 1052 + 974 1053 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ERR); 975 1054 return 1; 976 1055 } ··· 980 1057 int dstat) 981 1058 { 982 1059 struct qdio_irq *irq_ptr = cdev->private->qdio_data; 983 - char dbf_text[15]; 984 1060 985 - sprintf(dbf_text, "qehi%4x", cdev->private->schid.sch_no); 986 - QDIO_DBF_TEXT0(0, setup, dbf_text); 987 - QDIO_DBF_TEXT0(0, trace, dbf_text); 988 - 1061 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "qest irq"); 989 1062 if (!qdio_establish_check_errors(cdev, cstat, dstat)) 990 1063 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ESTABLISHED); 991 1064 } ··· 992 1073 { 993 1074 struct qdio_irq *irq_ptr = cdev->private->qdio_data; 994 1075 int cstat, dstat; 995 - char dbf_text[15]; 996 1076 997 1077 qdio_perf_stat_inc(&perf_stats.qdio_int); 998 1078 999 1079 if (!intparm || !irq_ptr) { 1000 - sprintf(dbf_text, "qihd%4x", cdev->private->schid.sch_no); 1001 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1080 + DBF_ERROR("qint:%4x", cdev->private->schid.sch_no); 1002 1081 return; 1003 1082 } 1004 1083 1005 1084 if (IS_ERR(irb)) { 1006 1085 switch (PTR_ERR(irb)) { 1007 1086 case -EIO: 1008 - sprintf(dbf_text, "ierr%4x", irq_ptr->schid.sch_no); 1009 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1087 + DBF_ERROR("%4x IO error", irq_ptr->schid.sch_no); 1010 1088 return; 1011 1089 case -ETIMEDOUT: 1012 - sprintf(dbf_text, "qtoh%4x", irq_ptr->schid.sch_no); 1013 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1090 + DBF_ERROR("%4x IO timeout", irq_ptr->schid.sch_no); 1014 1091 qdio_int_error(cdev); 1015 1092 return; 1016 1093 default: ··· 1014 1099 return; 1015 1100 } 1016 1101 } 1017 - qdio_irq_check_sense(irq_ptr->schid, irb); 1102 + qdio_irq_check_sense(irq_ptr, irb); 1018 1103 1019 1104 cstat = irb->scsw.cmd.cstat; 1020 1105 dstat = irb->scsw.cmd.dstat; ··· 1057 1142 int qdio_get_ssqd_desc(struct ccw_device *cdev, 1058 1143 struct qdio_ssqd_desc *data) 1059 1144 { 1060 - char dbf_text[15]; 1061 1145 1062 1146 if (!cdev || !cdev->private) 1063 1147 return -EINVAL; 1064 1148 1065 - sprintf(dbf_text, "qssq%4x", cdev->private->schid.sch_no); 1066 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1067 - 1149 + DBF_EVENT("get ssqd:%4x", cdev->private->schid.sch_no); 1068 1150 return qdio_setup_get_ssqd(NULL, &cdev->private->schid, data); 1069 1151 } 1070 1152 EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc); ··· 1076 1164 */ 1077 1165 int qdio_cleanup(struct ccw_device *cdev, int how) 1078 1166 { 1079 - struct qdio_irq *irq_ptr; 1080 - char dbf_text[15]; 1167 + struct qdio_irq *irq_ptr = cdev->private->qdio_data; 1081 1168 int rc; 1082 1169 1083 - sprintf(dbf_text, "qcln%4x", cdev->private->schid.sch_no); 1084 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1085 - 1086 - irq_ptr = cdev->private->qdio_data; 1087 1170 if (!irq_ptr) 1088 1171 return -ENODEV; 1089 1172 ··· 1111 1204 */ 1112 1205 int qdio_shutdown(struct ccw_device *cdev, int how) 1113 1206 { 1114 - struct qdio_irq *irq_ptr; 1207 + struct qdio_irq *irq_ptr = cdev->private->qdio_data; 1115 1208 int rc; 1116 1209 unsigned long flags; 1117 - char dbf_text[15]; 1118 1210 1119 - sprintf(dbf_text, "qshu%4x", cdev->private->schid.sch_no); 1120 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1121 - 1122 - irq_ptr = cdev->private->qdio_data; 1123 1211 if (!irq_ptr) 1124 1212 return -ENODEV; 1213 + 1214 + DBF_EVENT("qshutdown:%4x", cdev->private->schid.sch_no); 1125 1215 1126 1216 mutex_lock(&irq_ptr->setup_mutex); 1127 1217 /* ··· 1143 1239 /* default behaviour is halt */ 1144 1240 rc = ccw_device_halt(cdev, QDIO_DOING_CLEANUP); 1145 1241 if (rc) { 1146 - sprintf(dbf_text, "sher%4x", irq_ptr->schid.sch_no); 1147 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1148 - sprintf(dbf_text, "rc=%d", rc); 1149 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1242 + DBF_ERROR("%4x SHUTD ERR", irq_ptr->schid.sch_no); 1243 + DBF_ERROR("rc:%4d", rc); 1150 1244 goto no_cleanup; 1151 1245 } 1152 1246 ··· 1178 1276 */ 1179 1277 int qdio_free(struct ccw_device *cdev) 1180 1278 { 1181 - struct qdio_irq *irq_ptr; 1182 - char dbf_text[15]; 1279 + struct qdio_irq *irq_ptr = cdev->private->qdio_data; 1183 1280 1184 - sprintf(dbf_text, "qfre%4x", cdev->private->schid.sch_no); 1185 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1186 - 1187 - irq_ptr = cdev->private->qdio_data; 1188 1281 if (!irq_ptr) 1189 1282 return -ENODEV; 1190 1283 1284 + DBF_EVENT("qfree:%4x", cdev->private->schid.sch_no); 1191 1285 mutex_lock(&irq_ptr->setup_mutex); 1286 + 1287 + if (irq_ptr->debug_area != NULL) { 1288 + debug_unregister(irq_ptr->debug_area); 1289 + irq_ptr->debug_area = NULL; 1290 + } 1192 1291 cdev->private->qdio_data = NULL; 1193 1292 mutex_unlock(&irq_ptr->setup_mutex); 1194 1293 ··· 1208 1305 int qdio_initialize(struct qdio_initialize *init_data) 1209 1306 { 1210 1307 int rc; 1211 - char dbf_text[15]; 1212 - 1213 - sprintf(dbf_text, "qini%4x", init_data->cdev->private->schid.sch_no); 1214 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1215 1308 1216 1309 rc = qdio_allocate(init_data); 1217 1310 if (rc) ··· 1227 1328 int qdio_allocate(struct qdio_initialize *init_data) 1228 1329 { 1229 1330 struct qdio_irq *irq_ptr; 1230 - char dbf_text[15]; 1231 1331 1232 - sprintf(dbf_text, "qalc%4x", init_data->cdev->private->schid.sch_no); 1233 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1332 + DBF_EVENT("qallocate:%4x", init_data->cdev->private->schid.sch_no); 1234 1333 1235 1334 if ((init_data->no_input_qs && !init_data->input_handler) || 1236 1335 (init_data->no_output_qs && !init_data->output_handler)) ··· 1242 1345 (!init_data->output_sbal_addr_array)) 1243 1346 return -EINVAL; 1244 1347 1245 - qdio_allocate_do_dbf(init_data); 1246 - 1247 1348 /* irq_ptr must be in GFP_DMA since it contains ccw1.cda */ 1248 1349 irq_ptr = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA); 1249 1350 if (!irq_ptr) 1250 1351 goto out_err; 1251 - QDIO_DBF_TEXT0(0, setup, "irq_ptr:"); 1252 - QDIO_DBF_HEX0(0, setup, &irq_ptr, sizeof(void *)); 1253 1352 1254 1353 mutex_init(&irq_ptr->setup_mutex); 1354 + qdio_allocate_dbf(init_data, irq_ptr); 1255 1355 1256 1356 /* 1257 1357 * Allocate a page for the chsc calls in qdio_establish. ··· 1265 1371 if (!irq_ptr->qdr) 1266 1372 goto out_rel; 1267 1373 WARN_ON((unsigned long)irq_ptr->qdr & 0xfff); 1268 - 1269 - QDIO_DBF_TEXT0(0, setup, "qdr:"); 1270 - QDIO_DBF_HEX0(0, setup, &irq_ptr->qdr, sizeof(void *)); 1271 1374 1272 1375 if (qdio_allocate_qs(irq_ptr, init_data->no_input_qs, 1273 1376 init_data->no_output_qs)) ··· 1286 1395 */ 1287 1396 int qdio_establish(struct qdio_initialize *init_data) 1288 1397 { 1289 - char dbf_text[20]; 1290 1398 struct qdio_irq *irq_ptr; 1291 1399 struct ccw_device *cdev = init_data->cdev; 1292 1400 unsigned long saveflags; 1293 1401 int rc; 1294 1402 1295 - sprintf(dbf_text, "qest%4x", cdev->private->schid.sch_no); 1296 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1403 + DBF_EVENT("qestablish:%4x", cdev->private->schid.sch_no); 1297 1404 1298 1405 irq_ptr = cdev->private->qdio_data; 1299 1406 if (!irq_ptr) ··· 1321 1432 1322 1433 rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ESTABLISH, 0, 0); 1323 1434 if (rc) { 1324 - sprintf(dbf_text, "eq:io%4x", irq_ptr->schid.sch_no); 1325 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1326 - sprintf(dbf_text, "eq:rc%4x", rc); 1327 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1435 + DBF_ERROR("%4x est IO ERR", irq_ptr->schid.sch_no); 1436 + DBF_ERROR("rc:%4x", rc); 1328 1437 } 1329 1438 spin_unlock_irqrestore(get_ccwdev_lock(cdev), saveflags); 1330 1439 ··· 1343 1456 } 1344 1457 1345 1458 qdio_setup_ssqd_info(irq_ptr); 1346 - sprintf(dbf_text, "qDmmwc%2x", irq_ptr->ssqd_desc.mmwc); 1347 - QDIO_DBF_TEXT2(0, setup, dbf_text); 1348 - sprintf(dbf_text, "qib ac%2x", irq_ptr->qib.ac); 1349 - QDIO_DBF_TEXT2(0, setup, dbf_text); 1459 + DBF_EVENT("qDmmwc:%2x", irq_ptr->ssqd_desc.mmwc); 1460 + DBF_EVENT("qib ac:%4x", irq_ptr->qib.ac); 1350 1461 1351 1462 /* qebsm is now setup if available, initialize buffer states */ 1352 1463 qdio_init_buf_states(irq_ptr); ··· 1365 1480 struct qdio_irq *irq_ptr; 1366 1481 int rc; 1367 1482 unsigned long saveflags; 1368 - char dbf_text[20]; 1369 1483 1370 - sprintf(dbf_text, "qact%4x", cdev->private->schid.sch_no); 1371 - QDIO_DBF_TEXT0(0, setup, dbf_text); 1484 + DBF_EVENT("qactivate:%4x", cdev->private->schid.sch_no); 1372 1485 1373 1486 irq_ptr = cdev->private->qdio_data; 1374 1487 if (!irq_ptr) ··· 1392 1509 rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ACTIVATE, 1393 1510 0, DOIO_DENY_PREFETCH); 1394 1511 if (rc) { 1395 - sprintf(dbf_text, "aq:io%4x", irq_ptr->schid.sch_no); 1396 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1397 - sprintf(dbf_text, "aq:rc%4x", rc); 1398 - QDIO_DBF_TEXT2(1, setup, dbf_text); 1512 + DBF_ERROR("%4x act IO ERR", irq_ptr->schid.sch_no); 1513 + DBF_ERROR("rc:%4x", rc); 1399 1514 } 1400 1515 spin_unlock_irqrestore(get_ccwdev_lock(cdev), saveflags); 1401 1516 ··· 1539 1658 if (state != SLSB_CU_OUTPUT_PRIMED) 1540 1659 qdio_kick_outbound_q(q); 1541 1660 else { 1542 - QDIO_DBF_TEXT5(0, trace, "fast-req"); 1661 + DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "fast-req"); 1543 1662 qdio_perf_stat_inc(&perf_stats.fast_requeue); 1544 1663 } 1545 1664 out: ··· 1559 1678 int q_nr, int bufnr, int count) 1560 1679 { 1561 1680 struct qdio_irq *irq_ptr; 1562 - #ifdef CONFIG_QDIO_DEBUG 1563 - char dbf_text[20]; 1564 - 1565 - sprintf(dbf_text, "doQD%4x", cdev->private->schid.sch_no); 1566 - QDIO_DBF_TEXT3(0, trace, dbf_text); 1567 - #endif /* CONFIG_QDIO_DEBUG */ 1568 1681 1569 1682 if ((bufnr > QDIO_MAX_BUFFERS_PER_Q) || 1570 1683 (count > QDIO_MAX_BUFFERS_PER_Q) || ··· 1572 1697 if (!irq_ptr) 1573 1698 return -ENODEV; 1574 1699 1575 - #ifdef CONFIG_QDIO_DEBUG 1576 1700 if (callflags & QDIO_FLAG_SYNC_INPUT) 1577 - QDIO_DBF_HEX3(0, trace, &irq_ptr->input_qs[q_nr], 1578 - sizeof(void *)); 1701 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "doQDIO input"); 1579 1702 else 1580 - QDIO_DBF_HEX3(0, trace, &irq_ptr->output_qs[q_nr], 1581 - sizeof(void *)); 1582 - 1583 - sprintf(dbf_text, "flag%04x", callflags); 1584 - QDIO_DBF_TEXT3(0, trace, dbf_text); 1585 - sprintf(dbf_text, "qi%02xct%02x", bufnr, count); 1586 - QDIO_DBF_TEXT3(0, trace, dbf_text); 1587 - #endif /* CONFIG_QDIO_DEBUG */ 1703 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "doQDIO output"); 1704 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "q:%1d flag:%4x", q_nr, callflags); 1705 + DBF_DEV_EVENT(DBF_INFO, irq_ptr, "buf:%2d cnt:%3d", bufnr, count); 1588 1706 1589 1707 if (irq_ptr->state != QDIO_IRQ_STATE_ACTIVE) 1590 1708 return -EBUSY; 1591 1709 1592 1710 if (callflags & QDIO_FLAG_SYNC_INPUT) 1593 - handle_inbound(irq_ptr->input_qs[q_nr], 1594 - callflags, bufnr, count); 1711 + handle_inbound(irq_ptr->input_qs[q_nr], callflags, bufnr, 1712 + count); 1595 1713 else if (callflags & QDIO_FLAG_SYNC_OUTPUT) 1596 - handle_outbound(irq_ptr->output_qs[q_nr], 1597 - callflags, bufnr, count); 1598 - else { 1599 - QDIO_DBF_TEXT3(1, trace, "doQD:inv"); 1714 + handle_outbound(irq_ptr->output_qs[q_nr], callflags, bufnr, 1715 + count); 1716 + else 1600 1717 return -EINVAL; 1601 - } 1602 1718 return 0; 1603 1719 } 1604 1720 EXPORT_SYMBOL_GPL(do_QDIO);
+38 -72
drivers/s390/cio/qdio_setup.c
··· 120 120 } 121 121 122 122 static void setup_storage_lists(struct qdio_q *q, struct qdio_irq *irq_ptr, 123 - void **sbals_array, char *dbf_text, int i) 123 + void **sbals_array, int i) 124 124 { 125 125 struct qdio_q *prev; 126 126 int j; 127 127 128 - QDIO_DBF_TEXT0(0, setup, dbf_text); 129 - QDIO_DBF_HEX0(0, setup, &q, sizeof(void *)); 130 - 128 + DBF_HEX(&q, sizeof(void *)); 131 129 q->sl = (struct sl *)((char *)q->slib + PAGE_SIZE / 2); 132 130 133 131 /* fill in sbal */ ··· 148 150 for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; j++) 149 151 q->sl->element[j].sbal = (unsigned long)q->sbal[j]; 150 152 151 - QDIO_DBF_TEXT2(0, setup, "sl-sb-b0"); 152 - QDIO_DBF_HEX2(0, setup, q->sl, sizeof(void *)); 153 - QDIO_DBF_HEX2(0, setup, &q->slsb, sizeof(void *)); 154 - QDIO_DBF_HEX2(0, setup, q->sbal, sizeof(void *)); 153 + DBF_EVENT("sl-slsb-sbal"); 154 + DBF_HEX(q->sl, sizeof(void *)); 155 + DBF_HEX(&q->slsb, sizeof(void *)); 156 + DBF_HEX(q->sbal, sizeof(void *)); 155 157 } 156 158 157 159 static void setup_queues(struct qdio_irq *irq_ptr, 158 160 struct qdio_initialize *qdio_init) 159 161 { 160 - char dbf_text[20]; 161 162 struct qdio_q *q; 162 163 void **input_sbal_array = qdio_init->input_sbal_addr_array; 163 164 void **output_sbal_array = qdio_init->output_sbal_addr_array; 164 165 int i; 165 166 166 - sprintf(dbf_text, "qset%4x", qdio_init->cdev->private->schid.sch_no); 167 - QDIO_DBF_TEXT0(0, setup, dbf_text); 168 - 169 167 for_each_input_queue(irq_ptr, q, i) { 170 - sprintf(dbf_text, "in-q%4x", i); 168 + DBF_EVENT("in-q:%1d", i); 171 169 setup_queues_misc(q, irq_ptr, qdio_init->input_handler, i); 172 170 173 171 q->is_input_q = 1; 174 172 spin_lock_init(&q->u.in.lock); 175 - setup_storage_lists(q, irq_ptr, input_sbal_array, dbf_text, i); 173 + setup_storage_lists(q, irq_ptr, input_sbal_array, i); 176 174 input_sbal_array += QDIO_MAX_BUFFERS_PER_Q; 177 175 178 176 if (is_thinint_irq(irq_ptr)) ··· 180 186 } 181 187 182 188 for_each_output_queue(irq_ptr, q, i) { 183 - sprintf(dbf_text, "outq%4x", i); 189 + DBF_EVENT("outq:%1d", i); 184 190 setup_queues_misc(q, irq_ptr, qdio_init->output_handler, i); 185 191 186 192 q->is_input_q = 0; 187 - setup_storage_lists(q, irq_ptr, output_sbal_array, 188 - dbf_text, i); 193 + setup_storage_lists(q, irq_ptr, output_sbal_array, i); 189 194 output_sbal_array += QDIO_MAX_BUFFERS_PER_Q; 190 195 191 196 tasklet_init(&q->tasklet, qdio_outbound_processing, ··· 215 222 static void check_and_setup_qebsm(struct qdio_irq *irq_ptr, 216 223 unsigned char qdioac, unsigned long token) 217 224 { 218 - char dbf_text[15]; 219 - 220 225 if (!(irq_ptr->qib.rflags & QIB_RFLAGS_ENABLE_QEBSM)) 221 226 goto no_qebsm; 222 227 if (!(qdioac & AC1_SC_QEBSM_AVAILABLE) || ··· 223 232 224 233 irq_ptr->sch_token = token; 225 234 226 - QDIO_DBF_TEXT0(0, setup, "V=V:1"); 227 - sprintf(dbf_text, "%8lx", irq_ptr->sch_token); 228 - QDIO_DBF_TEXT0(0, setup, dbf_text); 235 + DBF_EVENT("V=V:1"); 236 + DBF_EVENT("%8lx", irq_ptr->sch_token); 229 237 return; 230 238 231 239 no_qebsm: 232 240 irq_ptr->sch_token = 0; 233 241 irq_ptr->qib.rflags &= ~QIB_RFLAGS_ENABLE_QEBSM; 234 - QDIO_DBF_TEXT0(0, setup, "noV=V"); 242 + DBF_EVENT("noV=V"); 235 243 } 236 244 237 245 /* ··· 244 254 struct chsc_ssqd_area *ssqd; 245 255 int rc; 246 256 247 - QDIO_DBF_TEXT0(0, setup, "getssqd"); 257 + DBF_EVENT("getssqd:%4x", schid->sch_no); 248 258 if (irq_ptr != NULL) 249 259 ssqd = (struct chsc_ssqd_area *)irq_ptr->chsc_page; 250 260 else ··· 284 294 void qdio_setup_ssqd_info(struct qdio_irq *irq_ptr) 285 295 { 286 296 unsigned char qdioac; 287 - char dbf_text[15]; 288 297 int rc; 289 298 290 299 rc = qdio_setup_get_ssqd(irq_ptr, &irq_ptr->schid, NULL); 291 300 if (rc) { 292 - QDIO_DBF_TEXT2(0, setup, "ssqdasig"); 293 - sprintf(dbf_text, "schn%4x", irq_ptr->schid.sch_no); 294 - QDIO_DBF_TEXT2(0, setup, dbf_text); 295 - sprintf(dbf_text, "rc:%d", rc); 296 - QDIO_DBF_TEXT2(0, setup, dbf_text); 301 + DBF_ERROR("%4x ssqd ERR", irq_ptr->schid.sch_no); 302 + DBF_ERROR("rc:%x", rc); 297 303 /* all flags set, worst case */ 298 304 qdioac = AC1_SIGA_INPUT_NEEDED | AC1_SIGA_OUTPUT_NEEDED | 299 305 AC1_SIGA_SYNC_NEEDED; ··· 298 312 299 313 check_and_setup_qebsm(irq_ptr, qdioac, irq_ptr->ssqd_desc.sch_token); 300 314 process_ac_flags(irq_ptr, qdioac); 301 - 302 - sprintf(dbf_text, "qdioac%2x", qdioac); 303 - QDIO_DBF_TEXT2(0, setup, dbf_text); 315 + DBF_EVENT("qdioac:%4x", qdioac); 304 316 } 305 317 306 318 void qdio_release_memory(struct qdio_irq *irq_ptr) ··· 418 434 /* get qdio commands */ 419 435 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_EQUEUE); 420 436 if (!ciw) { 421 - QDIO_DBF_TEXT2(1, setup, "no eq"); 437 + DBF_ERROR("%4x NO EQ", irq_ptr->schid.sch_no); 422 438 rc = -EINVAL; 423 439 goto out_err; 424 440 } ··· 426 442 427 443 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_AQUEUE); 428 444 if (!ciw) { 429 - QDIO_DBF_TEXT2(1, setup, "no aq"); 445 + DBF_ERROR("%4x NO AQ", irq_ptr->schid.sch_no); 430 446 rc = -EINVAL; 431 447 goto out_err; 432 448 } ··· 446 462 { 447 463 char s[80]; 448 464 449 - sprintf(s, "qdio: %s ", dev_name(&cdev->dev)); 450 - switch (irq_ptr->qib.qfmt) { 451 - case QDIO_QETH_QFMT: 452 - sprintf(s + strlen(s), "OSA "); 453 - break; 454 - case QDIO_ZFCP_QFMT: 455 - sprintf(s + strlen(s), "ZFCP "); 456 - break; 457 - case QDIO_IQDIO_QFMT: 458 - sprintf(s + strlen(s), "HS "); 459 - break; 460 - } 461 - sprintf(s + strlen(s), "on SC %x using ", irq_ptr->schid.sch_no); 462 - sprintf(s + strlen(s), "AI:%d ", is_thinint_irq(irq_ptr)); 463 - sprintf(s + strlen(s), "QEBSM:%d ", (irq_ptr->sch_token) ? 1 : 0); 464 - sprintf(s + strlen(s), "PCI:%d ", 465 - (irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED) ? 1 : 0); 466 - sprintf(s + strlen(s), "TDD:%d ", css_general_characteristics.aif_tdd); 467 - sprintf(s + strlen(s), "SIGA:"); 468 - sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.input) ? "R" : " "); 469 - sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.output) ? "W" : " "); 470 - sprintf(s + strlen(s), "%s", (irq_ptr->siga_flag.sync) ? "S" : " "); 471 - sprintf(s + strlen(s), "%s", 472 - (!irq_ptr->siga_flag.no_sync_ti) ? "A" : " "); 473 - sprintf(s + strlen(s), "%s", 474 - (!irq_ptr->siga_flag.no_sync_out_ti) ? "O" : " "); 475 - sprintf(s + strlen(s), "%s", 476 - (!irq_ptr->siga_flag.no_sync_out_pci) ? "P" : " "); 477 - sprintf(s + strlen(s), "\n"); 465 + snprintf(s, 80, "qdio: %s %s on SC %x using " 466 + "AI:%d QEBSM:%d PCI:%d TDD:%d SIGA:%s%s%s%s%s%s\n", 467 + dev_name(&cdev->dev), 468 + (irq_ptr->qib.qfmt == QDIO_QETH_QFMT) ? "OSA" : 469 + ((irq_ptr->qib.qfmt == QDIO_ZFCP_QFMT) ? "ZFCP" : "HS"), 470 + irq_ptr->schid.sch_no, 471 + is_thinint_irq(irq_ptr), 472 + (irq_ptr->sch_token) ? 1 : 0, 473 + (irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED) ? 1 : 0, 474 + css_general_characteristics.aif_tdd, 475 + (irq_ptr->siga_flag.input) ? "R" : " ", 476 + (irq_ptr->siga_flag.output) ? "W" : " ", 477 + (irq_ptr->siga_flag.sync) ? "S" : " ", 478 + (!irq_ptr->siga_flag.no_sync_ti) ? "A" : " ", 479 + (!irq_ptr->siga_flag.no_sync_out_ti) ? "O" : " ", 480 + (!irq_ptr->siga_flag.no_sync_out_pci) ? "P" : " "); 478 481 printk(KERN_INFO "%s", s); 479 482 } 480 483 481 484 int __init qdio_setup_init(void) 482 485 { 483 - char dbf_text[15]; 484 - 485 486 qdio_q_cache = kmem_cache_create("qdio_q", sizeof(struct qdio_q), 486 487 256, 0, NULL); 487 488 if (!qdio_q_cache) 488 489 return -ENOMEM; 489 490 490 491 /* Check for OSA/FCP thin interrupts (bit 67). */ 491 - sprintf(dbf_text, "thini%1x", 492 - (css_general_characteristics.aif_osa) ? 1 : 0); 493 - QDIO_DBF_TEXT0(0, setup, dbf_text); 492 + DBF_EVENT("thinint:%1d", 493 + (css_general_characteristics.aif_osa) ? 1 : 0); 494 494 495 495 /* Check for QEBSM support in general (bit 58). */ 496 - sprintf(dbf_text, "cssQBS:%1x", 497 - (qebsm_possible()) ? 1 : 0); 498 - QDIO_DBF_TEXT0(0, setup, dbf_text); 496 + DBF_EVENT("cssQEBSM:%1d", (qebsm_possible()) ? 1 : 0); 499 497 return 0; 500 498 } 501 499
+8 -17
drivers/s390/cio/qdio_thinint.c
··· 258 258 static int set_subchannel_ind(struct qdio_irq *irq_ptr, int reset) 259 259 { 260 260 struct scssc_area *scssc_area; 261 - char dbf_text[15]; 262 - void *ptr; 263 261 int rc; 264 262 265 263 scssc_area = (struct scssc_area *)irq_ptr->chsc_page; ··· 292 294 293 295 rc = chsc_error_from_response(scssc_area->response.code); 294 296 if (rc) { 295 - sprintf(dbf_text, "sidR%4x", scssc_area->response.code); 296 - QDIO_DBF_TEXT1(0, trace, dbf_text); 297 - QDIO_DBF_TEXT1(0, setup, dbf_text); 298 - ptr = &scssc_area->response; 299 - QDIO_DBF_HEX2(1, setup, &ptr, QDIO_DBF_SETUP_LEN); 297 + DBF_ERROR("%4x SSI r:%4x", irq_ptr->schid.sch_no, 298 + scssc_area->response.code); 299 + DBF_ERROR_HEX(&scssc_area->response, sizeof(void *)); 300 300 return rc; 301 301 } 302 302 303 - QDIO_DBF_TEXT2(0, setup, "setscind"); 304 - QDIO_DBF_HEX2(0, setup, &scssc_area->summary_indicator_addr, 305 - sizeof(unsigned long)); 306 - QDIO_DBF_HEX2(0, setup, &scssc_area->subchannel_indicator_addr, 307 - sizeof(unsigned long)); 303 + DBF_EVENT("setscind"); 304 + DBF_HEX(&scssc_area->summary_indicator_addr, sizeof(unsigned long)); 305 + DBF_HEX(&scssc_area->subchannel_indicator_addr, sizeof(unsigned long)); 308 306 return 0; 309 307 } 310 308 ··· 321 327 322 328 int __init tiqdio_register_thinints(void) 323 329 { 324 - char dbf_text[20]; 325 - 326 330 isc_register(QDIO_AIRQ_ISC); 327 331 tiqdio_alsi = s390_register_adapter_interrupt(&tiqdio_thinint_handler, 328 332 NULL, QDIO_AIRQ_ISC); 329 333 if (IS_ERR(tiqdio_alsi)) { 330 - sprintf(dbf_text, "regthn%lx", PTR_ERR(tiqdio_alsi)); 331 - QDIO_DBF_TEXT0(0, setup, dbf_text); 334 + DBF_EVENT("RTI:%lx", PTR_ERR(tiqdio_alsi)); 332 335 tiqdio_alsi = NULL; 333 336 isc_unregister(QDIO_AIRQ_ISC); 334 337 return -ENOMEM; ··· 351 360 if (!is_thinint_irq(irq_ptr)) 352 361 return; 353 362 irq_ptr->dsci = get_indicator(); 354 - QDIO_DBF_HEX1(0, setup, &irq_ptr->dsci, sizeof(void *)); 363 + DBF_HEX(&irq_ptr->dsci, sizeof(void *)); 355 364 } 356 365 357 366 void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)