.. | .. |
---|
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 | } |
---|