| .. | .. |
|---|
| 138 | 138 | * Dump trace buffer entry to memory file |
|---|
| 139 | 139 | * and increment read index @rd_idx |
|---|
| 140 | 140 | */ |
|---|
| 141 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 141 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 142 | 142 | (trace_max_pages * PAGE_SIZE * 3) - len, |
|---|
| 143 | 143 | "%16llu.%09lu %-50s %8x %8x %16llx %16llx " |
|---|
| 144 | 144 | "%16llx %16llx %16llx\n", (u64)val.tv_sec, |
|---|
| .. | .. |
|---|
| 180 | 180 | * Dump trace buffer entry to memory file |
|---|
| 181 | 181 | * and increment read index @rd_idx |
|---|
| 182 | 182 | */ |
|---|
| 183 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 183 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 184 | 184 | (trace_max_pages * PAGE_SIZE * 3) - len, |
|---|
| 185 | 185 | "%16llu.%09lu %-50s %8x %8x %16llx %16llx " |
|---|
| 186 | 186 | "%16llx %16llx %16llx\n", (u64)val.tv_sec, |
|---|
| .. | .. |
|---|
| 220 | 220 | struct timespec64 val1, val2; |
|---|
| 221 | 221 | |
|---|
| 222 | 222 | ktime_get_real_ts64(&val1); |
|---|
| 223 | | - len = snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 223 | + len = scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 224 | 224 | "------------------------------------------\n" |
|---|
| 225 | 225 | "\t\tTime\n" |
|---|
| 226 | 226 | "------------------------------------------\n"); |
|---|
| 227 | 227 | |
|---|
| 228 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 228 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 229 | 229 | "Current time : [%lld:%ld]\n" |
|---|
| 230 | 230 | "Last stats reset time: [%lld:%09ld]\n" |
|---|
| 231 | 231 | "Last stats read time: [%lld:%ld]\n" |
|---|
| .. | .. |
|---|
| 243 | 243 | |
|---|
| 244 | 244 | stats->stats_timestamps.last_read_time = val1; |
|---|
| 245 | 245 | |
|---|
| 246 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 246 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 247 | 247 | "------------------------------------------\n" |
|---|
| 248 | 248 | "\t\tIO Statistics\n" |
|---|
| 249 | 249 | "------------------------------------------\n"); |
|---|
| 250 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 250 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 251 | 251 | "Number of Active IOs: %lld\nMaximum Active IOs: %lld\n" |
|---|
| 252 | 252 | "Number of IOs: %lld\nNumber of IO Completions: %lld\n" |
|---|
| 253 | 253 | "Number of IO Failures: %lld\nNumber of IO NOT Found: %lld\n" |
|---|
| .. | .. |
|---|
| 280 | 280 | (u64)atomic64_read(&stats->io_stats.io_btw_10000_to_30000_msec), |
|---|
| 281 | 281 | (u64)atomic64_read(&stats->io_stats.io_greater_than_30000_msec)); |
|---|
| 282 | 282 | |
|---|
| 283 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 283 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 284 | 284 | "\nCurrent Max IO time : %lld\n", |
|---|
| 285 | 285 | (u64)atomic64_read(&stats->io_stats.current_max_io_time)); |
|---|
| 286 | 286 | |
|---|
| 287 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 287 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 288 | 288 | "\n------------------------------------------\n" |
|---|
| 289 | 289 | "\t\tAbort Statistics\n" |
|---|
| 290 | 290 | "------------------------------------------\n"); |
|---|
| 291 | 291 | |
|---|
| 292 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 292 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 293 | 293 | "Number of Aborts: %lld\n" |
|---|
| 294 | 294 | "Number of Abort Failures: %lld\n" |
|---|
| 295 | 295 | "Number of Abort Driver Timeouts: %lld\n" |
|---|
| .. | .. |
|---|
| 318 | 318 | (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_50_to_60_sec), |
|---|
| 319 | 319 | (u64)atomic64_read(&stats->abts_stats.abort_issued_greater_than_60_sec)); |
|---|
| 320 | 320 | |
|---|
| 321 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 321 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 322 | 322 | "\n------------------------------------------\n" |
|---|
| 323 | 323 | "\t\tTerminate Statistics\n" |
|---|
| 324 | 324 | "------------------------------------------\n"); |
|---|
| 325 | 325 | |
|---|
| 326 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 326 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 327 | 327 | "Number of Terminates: %lld\n" |
|---|
| 328 | 328 | "Maximum Terminates: %lld\n" |
|---|
| 329 | 329 | "Number of Terminate Driver Timeouts: %lld\n" |
|---|
| .. | .. |
|---|
| 337 | 337 | (u64)atomic64_read(&stats->term_stats.terminate_io_not_found), |
|---|
| 338 | 338 | (u64)atomic64_read(&stats->term_stats.terminate_failures)); |
|---|
| 339 | 339 | |
|---|
| 340 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 340 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 341 | 341 | "\n------------------------------------------\n" |
|---|
| 342 | 342 | "\t\tReset Statistics\n" |
|---|
| 343 | 343 | "------------------------------------------\n"); |
|---|
| 344 | 344 | |
|---|
| 345 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 345 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 346 | 346 | "Number of Device Resets: %lld\n" |
|---|
| 347 | 347 | "Number of Device Reset Failures: %lld\n" |
|---|
| 348 | 348 | "Number of Device Reset Aborts: %lld\n" |
|---|
| .. | .. |
|---|
| 368 | 368 | &stats->reset_stats.fnic_reset_completions), |
|---|
| 369 | 369 | (u64)atomic64_read(&stats->reset_stats.fnic_reset_failures)); |
|---|
| 370 | 370 | |
|---|
| 371 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 371 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 372 | 372 | "\n------------------------------------------\n" |
|---|
| 373 | 373 | "\t\tFirmware Statistics\n" |
|---|
| 374 | 374 | "------------------------------------------\n"); |
|---|
| 375 | 375 | |
|---|
| 376 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 376 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 377 | 377 | "Number of Active FW Requests %lld\n" |
|---|
| 378 | 378 | "Maximum FW Requests: %lld\n" |
|---|
| 379 | 379 | "Number of FW out of resources: %lld\n" |
|---|
| .. | .. |
|---|
| 383 | 383 | (u64)atomic64_read(&stats->fw_stats.fw_out_of_resources), |
|---|
| 384 | 384 | (u64)atomic64_read(&stats->fw_stats.io_fw_errs)); |
|---|
| 385 | 385 | |
|---|
| 386 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 386 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 387 | 387 | "\n------------------------------------------\n" |
|---|
| 388 | 388 | "\t\tVlan Discovery Statistics\n" |
|---|
| 389 | 389 | "------------------------------------------\n"); |
|---|
| 390 | 390 | |
|---|
| 391 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 391 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 392 | 392 | "Number of Vlan Discovery Requests Sent %lld\n" |
|---|
| 393 | 393 | "Vlan Response Received with no FCF VLAN ID: %lld\n" |
|---|
| 394 | 394 | "No solicitations recvd after vlan set, expiry count: %lld\n" |
|---|
| .. | .. |
|---|
| 398 | 398 | (u64)atomic64_read(&stats->vlan_stats.sol_expiry_count), |
|---|
| 399 | 399 | (u64)atomic64_read(&stats->vlan_stats.flogi_rejects)); |
|---|
| 400 | 400 | |
|---|
| 401 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 401 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 402 | 402 | "\n------------------------------------------\n" |
|---|
| 403 | 403 | "\t\tOther Important Statistics\n" |
|---|
| 404 | 404 | "------------------------------------------\n"); |
|---|
| .. | .. |
|---|
| 406 | 406 | jiffies_to_timespec64(stats->misc_stats.last_isr_time, &val1); |
|---|
| 407 | 407 | jiffies_to_timespec64(stats->misc_stats.last_ack_time, &val2); |
|---|
| 408 | 408 | |
|---|
| 409 | | - len += snprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 409 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 410 | 410 | "Last ISR time: %llu (%8llu.%09lu)\n" |
|---|
| 411 | 411 | "Last ACK time: %llu (%8llu.%09lu)\n" |
|---|
| 412 | + "Max ISR jiffies: %llu\n" |
|---|
| 413 | + "Max ISR time (ms) (0 denotes < 1 ms): %llu\n" |
|---|
| 414 | + "Corr. work done: %llu\n" |
|---|
| 412 | 415 | "Number of ISRs: %lld\n" |
|---|
| 413 | 416 | "Maximum CQ Entries: %lld\n" |
|---|
| 414 | 417 | "Number of ACK index out of range: %lld\n" |
|---|
| .. | .. |
|---|
| 428 | 431 | (s64)val1.tv_sec, val1.tv_nsec, |
|---|
| 429 | 432 | (u64)stats->misc_stats.last_ack_time, |
|---|
| 430 | 433 | (s64)val2.tv_sec, val2.tv_nsec, |
|---|
| 434 | + (u64)atomic64_read(&stats->misc_stats.max_isr_jiffies), |
|---|
| 435 | + (u64)atomic64_read(&stats->misc_stats.max_isr_time_ms), |
|---|
| 436 | + (u64)atomic64_read(&stats->misc_stats.corr_work_done), |
|---|
| 431 | 437 | (u64)atomic64_read(&stats->misc_stats.isr_count), |
|---|
| 432 | 438 | (u64)atomic64_read(&stats->misc_stats.max_cq_entries), |
|---|
| 433 | 439 | (u64)atomic64_read(&stats->misc_stats.ack_index_out_of_range), |
|---|
| .. | .. |
|---|
| 445 | 451 | (u64)atomic64_read(&stats->misc_stats.queue_fulls), |
|---|
| 446 | 452 | (u64)atomic64_read(&stats->misc_stats.rport_not_ready), |
|---|
| 447 | 453 | (u64)atomic64_read(&stats->misc_stats.frame_errors)); |
|---|
| 454 | + |
|---|
| 455 | + len += scnprintf(debug->debug_buffer + len, buf_size - len, |
|---|
| 456 | + "Firmware reported port speed: %llu\n", |
|---|
| 457 | + (u64)atomic64_read( |
|---|
| 458 | + &stats->misc_stats.current_port_speed)); |
|---|
| 448 | 459 | |
|---|
| 449 | 460 | return len; |
|---|
| 450 | 461 | |
|---|
| .. | .. |
|---|
| 468 | 479 | fnic_max_trace_entries = (trace_max_pages * PAGE_SIZE)/ |
|---|
| 469 | 480 | FNIC_ENTRY_SIZE_BYTES; |
|---|
| 470 | 481 | |
|---|
| 471 | | - fnic_trace_buf_p = (unsigned long)vmalloc((trace_max_pages * PAGE_SIZE)); |
|---|
| 482 | + fnic_trace_buf_p = (unsigned long)vzalloc(trace_max_pages * PAGE_SIZE); |
|---|
| 472 | 483 | if (!fnic_trace_buf_p) { |
|---|
| 473 | 484 | printk(KERN_ERR PFX "Failed to allocate memory " |
|---|
| 474 | 485 | "for fnic_trace_buf_p\n"); |
|---|
| 475 | 486 | err = -ENOMEM; |
|---|
| 476 | 487 | goto err_fnic_trace_buf_init; |
|---|
| 477 | 488 | } |
|---|
| 478 | | - memset((void *)fnic_trace_buf_p, 0, (trace_max_pages * PAGE_SIZE)); |
|---|
| 479 | 489 | |
|---|
| 480 | 490 | fnic_trace_entries.page_offset = |
|---|
| 481 | 491 | vmalloc(array_size(fnic_max_trace_entries, |
|---|
| .. | .. |
|---|
| 504 | 514 | fnic_trace_entries.page_offset[i] = fnic_buf_head; |
|---|
| 505 | 515 | fnic_buf_head += FNIC_ENTRY_SIZE_BYTES; |
|---|
| 506 | 516 | } |
|---|
| 507 | | - err = fnic_trace_debugfs_init(); |
|---|
| 508 | | - if (err < 0) { |
|---|
| 509 | | - pr_err("fnic: Failed to initialize debugfs for tracing\n"); |
|---|
| 510 | | - goto err_fnic_trace_debugfs_init; |
|---|
| 511 | | - } |
|---|
| 517 | + fnic_trace_debugfs_init(); |
|---|
| 512 | 518 | pr_info("fnic: Successfully Initialized Trace Buffer\n"); |
|---|
| 513 | 519 | return err; |
|---|
| 514 | | -err_fnic_trace_debugfs_init: |
|---|
| 515 | | - fnic_trace_free(); |
|---|
| 520 | + |
|---|
| 516 | 521 | err_fnic_trace_buf_init: |
|---|
| 517 | 522 | return err; |
|---|
| 518 | 523 | } |
|---|
| .. | .. |
|---|
| 597 | 602 | fc_trace_entries.page_offset[i] = fc_trace_buf_head; |
|---|
| 598 | 603 | fc_trace_buf_head += FC_TRC_SIZE_BYTES; |
|---|
| 599 | 604 | } |
|---|
| 600 | | - err = fnic_fc_trace_debugfs_init(); |
|---|
| 601 | | - if (err < 0) { |
|---|
| 602 | | - pr_err("fnic: Failed to initialize FC_CTLR tracing.\n"); |
|---|
| 603 | | - goto err_fnic_fc_ctlr_trace_debugfs_init; |
|---|
| 604 | | - } |
|---|
| 605 | + fnic_fc_trace_debugfs_init(); |
|---|
| 605 | 606 | pr_info("fnic: Successfully Initialized FC_CTLR Trace Buffer\n"); |
|---|
| 606 | 607 | return err; |
|---|
| 607 | 608 | |
|---|
| 608 | | -err_fnic_fc_ctlr_trace_debugfs_init: |
|---|
| 609 | | - fnic_fc_trace_free(); |
|---|
| 610 | 609 | err_fnic_fc_ctlr_trace_buf_init: |
|---|
| 611 | 610 | return err; |
|---|
| 612 | 611 | } |
|---|
| .. | .. |
|---|
| 743 | 742 | rd_idx = fc_trace_entries.rd_idx; |
|---|
| 744 | 743 | wr_idx = fc_trace_entries.wr_idx; |
|---|
| 745 | 744 | if (rdata_flag == 0) { |
|---|
| 746 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 745 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 747 | 746 | (fnic_fc_trace_max_pages * PAGE_SIZE * 3) - len, |
|---|
| 748 | 747 | "Time Stamp (UTC)\t\t" |
|---|
| 749 | 748 | "Host No: F Type: len: FCoE_FRAME:\n"); |
|---|
| .. | .. |
|---|
| 763 | 762 | } else { |
|---|
| 764 | 763 | fc_trace = (char *)tdata; |
|---|
| 765 | 764 | for (j = 0; j < FC_TRC_SIZE_BYTES; j++) { |
|---|
| 766 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 765 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 767 | 766 | (fnic_fc_trace_max_pages * PAGE_SIZE * 3) |
|---|
| 768 | 767 | - len, "%02x", fc_trace[j] & 0xff); |
|---|
| 769 | 768 | } /* for loop */ |
|---|
| 770 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 769 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 771 | 770 | (fnic_fc_trace_max_pages * PAGE_SIZE * 3) - len, |
|---|
| 772 | 771 | "\n"); |
|---|
| 773 | 772 | } |
|---|
| .. | .. |
|---|
| 811 | 810 | time64_to_tm(tdata->time_stamp.tv_sec, 0, &tm); |
|---|
| 812 | 811 | |
|---|
| 813 | 812 | fmt = "%02d:%02d:%04ld %02d:%02d:%02d.%09lu ns%8x %c%8x\t"; |
|---|
| 814 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 813 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 815 | 814 | max_size - len, |
|---|
| 816 | 815 | fmt, |
|---|
| 817 | 816 | tm.tm_mon + 1, tm.tm_mday, tm.tm_year + 1900, |
|---|
| .. | .. |
|---|
| 824 | 823 | for (j = 0; j < min_t(u8, tdata->frame_len, |
|---|
| 825 | 824 | (u8)(FC_TRC_SIZE_BYTES - FC_TRC_HEADER_SIZE)); j++) { |
|---|
| 826 | 825 | if (tdata->frame_type == FNIC_FC_LE) { |
|---|
| 827 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 826 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 828 | 827 | max_size - len, "%c", fc_trace[j]); |
|---|
| 829 | 828 | } else { |
|---|
| 830 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 829 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 831 | 830 | max_size - len, "%02x", fc_trace[j] & 0xff); |
|---|
| 832 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 831 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 833 | 832 | max_size - len, " "); |
|---|
| 834 | 833 | if (j == ethhdr_len || |
|---|
| 835 | 834 | j == ethhdr_len + fcoehdr_len || |
|---|
| 836 | 835 | j == ethhdr_len + fcoehdr_len + fchdr_len || |
|---|
| 837 | 836 | (i > 3 && j%fchdr_len == 0)) { |
|---|
| 838 | | - len += snprintf(fnic_dbgfs_prt->buffer |
|---|
| 837 | + len += scnprintf(fnic_dbgfs_prt->buffer |
|---|
| 839 | 838 | + len, max_size - len, |
|---|
| 840 | 839 | "\n\t\t\t\t\t\t\t\t"); |
|---|
| 841 | 840 | i++; |
|---|
| 842 | 841 | } |
|---|
| 843 | 842 | } /* end of else*/ |
|---|
| 844 | 843 | } /* End of for loop*/ |
|---|
| 845 | | - len += snprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 844 | + len += scnprintf(fnic_dbgfs_prt->buffer + len, |
|---|
| 846 | 845 | max_size - len, "\n"); |
|---|
| 847 | 846 | *orig_len = len; |
|---|
| 848 | 847 | } |
|---|