int fnic_get_stats_data()

in fnic/fnic_trace.c [215:462]


int fnic_get_stats_data(struct stats_debug_info *debug,
			struct fnic_stats *stats)
{
	int len = 0;
	int buf_size = debug->buf_size;
	struct timespec64 val1, val2;

	ktime_get_real_ts64(&val1);
	len = scnprintf(debug->debug_buffer + len, buf_size - len,
		"------------------------------------------\n"
		 "\t\tTime\n"
		"------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		"Current time :          [%lld:%ld]\n"
		"Last stats reset time:  [%lld:%09ld]\n"
		"Last stats read time:   [%lld:%ld]\n"
		"delta since last reset: [%lld:%ld]\n"
		"delta since last read:  [%lld:%ld]\n",
	(s64)val1.tv_sec, val1.tv_nsec,
	(s64)stats->stats_timestamps.last_reset_time.tv_sec,
	stats->stats_timestamps.last_reset_time.tv_nsec,
	(s64)stats->stats_timestamps.last_read_time.tv_sec,
	stats->stats_timestamps.last_read_time.tv_nsec,
	(s64)timespec64_sub(val1, stats->stats_timestamps.last_reset_time).tv_sec,
	timespec64_sub(val1, stats->stats_timestamps.last_reset_time).tv_nsec,
	(s64)timespec64_sub(val1, stats->stats_timestamps.last_read_time).tv_sec,
	timespec64_sub(val1, stats->stats_timestamps.last_read_time).tv_nsec);

	stats->stats_timestamps.last_read_time = val1;

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "------------------------------------------\n"
		  "\t\tIO Statistics\n"
		  "------------------------------------------\n");
	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Active IOs: %lld\nMaximum Active IOs: %lld\n"
		  "Number of IOs: %lld\nNumber of IO Completions: %lld\n"
		  "Number of IO Failures: %lld\nNumber of IO NOT Found: %lld\n"
		  "Number of Memory alloc Failures: %lld\n"
		  "Number of IOREQ Null: %lld\n"
		  "Number of SCSI cmd pointer Null: %lld\n"

		  "\nIO completion times: \n"
		  "            < 10 ms : %lld\n"
		  "     10 ms - 100 ms : %lld\n"
		  "    100 ms - 500 ms : %lld\n"
		  "    500 ms -   5 sec: %lld\n"
		  "     5 sec -  10 sec: %lld\n"
		  "    10 sec -  30 sec: %lld\n"
		  "            > 30 sec: %lld\n",
		  (u64)atomic64_read(&stats->io_stats.active_ios),
		  (u64)atomic64_read(&stats->io_stats.max_active_ios),
		  (u64)atomic64_read(&stats->io_stats.num_ios),
		  (u64)atomic64_read(&stats->io_stats.io_completions),
		  (u64)atomic64_read(&stats->io_stats.io_failures),
		  (u64)atomic64_read(&stats->io_stats.io_not_found),
		  (u64)atomic64_read(&stats->io_stats.alloc_failures),
		  (u64)atomic64_read(&stats->io_stats.ioreq_null),
		  (u64)atomic64_read(&stats->io_stats.sc_null),
		  (u64)atomic64_read(&stats->io_stats.io_btw_0_to_10_msec),
		  (u64)atomic64_read(&stats->io_stats.io_btw_10_to_100_msec),
		  (u64)atomic64_read(&stats->io_stats.io_btw_100_to_500_msec),
		  (u64)atomic64_read(&stats->io_stats.io_btw_500_to_5000_msec),
		  (u64)atomic64_read(&stats->io_stats.io_btw_5000_to_10000_msec),
		  (u64)atomic64_read(&stats->io_stats.io_btw_10000_to_30000_msec),
		  (u64)atomic64_read(&stats->io_stats.io_greater_than_30000_msec));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\nCurrent Max IO time : %lld\n",
		  (u64)atomic64_read(&stats->io_stats.current_max_io_time));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tAbort Statistics\n"
		  "------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Aborts: %lld\n"
		  "Number of Abort Failures: %lld\n"
		  "Number of Abort Driver Timeouts: %lld\n"
		  "Number of Abort FW Timeouts: %lld\n"
		  "Number of Abort IO NOT Found: %lld\n"

		  "Abort issued times: \n"
		  "            < 6 sec : %lld\n"
		  "     6 sec - 20 sec : %lld\n"
		  "    20 sec - 30 sec : %lld\n"
		  "    30 sec - 40 sec : %lld\n"
		  "    40 sec - 50 sec : %lld\n"
		  "    50 sec - 60 sec : %lld\n"
		  "            > 60 sec: %lld\n",

		  (u64)atomic64_read(&stats->abts_stats.aborts),
		  (u64)atomic64_read(&stats->abts_stats.abort_failures),
		  (u64)atomic64_read(&stats->abts_stats.abort_drv_timeouts),
		  (u64)atomic64_read(&stats->abts_stats.abort_fw_timeouts),
		  (u64)atomic64_read(&stats->abts_stats.abort_io_not_found),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_0_to_6_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_6_to_20_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_20_to_30_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_30_to_40_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_40_to_50_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_btw_50_to_60_sec),
		  (u64)atomic64_read(&stats->abts_stats.abort_issued_greater_than_60_sec));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tTerminate Statistics\n"
		  "------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Terminates: %lld\n"
		  "Maximum Terminates: %lld\n"
		  "Number of Terminate Driver Timeouts: %lld\n"
		  "Number of Terminate FW Timeouts: %lld\n"
		  "Number of Terminate IO NOT Found: %lld\n"
		  "Number of Terminate Failures: %lld\n",
		  (u64)atomic64_read(&stats->term_stats.terminates),
		  (u64)atomic64_read(&stats->term_stats.max_terminates),
		  (u64)atomic64_read(&stats->term_stats.terminate_drv_timeouts),
		  (u64)atomic64_read(&stats->term_stats.terminate_fw_timeouts),
		  (u64)atomic64_read(&stats->term_stats.terminate_io_not_found),
		  (u64)atomic64_read(&stats->term_stats.terminate_failures));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tReset Statistics\n"
		  "------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Device Resets: %lld\n"
		  "Number of Device Reset Failures: %lld\n"
		  "Number of Device Reset Aborts: %lld\n"
		  "Number of Device Reset Timeouts: %lld\n"
		  "Number of Device Reset Terminates: %lld\n"
		  "Number of FW Resets: %lld\n"
		  "Number of FW Reset Completions: %lld\n"
		  "Number of FW Reset Failures: %lld\n"
		  "Number of Fnic Reset: %lld\n"
		  "Number of Fnic Reset Completions: %lld\n"
		  "Number of Fnic Reset Failures: %lld\n",
		  (u64)atomic64_read(&stats->reset_stats.device_resets),
		  (u64)atomic64_read(&stats->reset_stats.device_reset_failures),
		  (u64)atomic64_read(&stats->reset_stats.device_reset_aborts),
		  (u64)atomic64_read(&stats->reset_stats.device_reset_timeouts),
		  (u64)atomic64_read(
			  &stats->reset_stats.device_reset_terminates),
		  (u64)atomic64_read(&stats->reset_stats.fw_resets),
		  (u64)atomic64_read(&stats->reset_stats.fw_reset_completions),
		  (u64)atomic64_read(&stats->reset_stats.fw_reset_failures),
		  (u64)atomic64_read(&stats->reset_stats.fnic_resets),
		  (u64)atomic64_read(
			  &stats->reset_stats.fnic_reset_completions),
		  (u64)atomic64_read(&stats->reset_stats.fnic_reset_failures));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tFirmware Statistics\n"
		  "------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Active FW Requests %lld\n"
		  "Maximum FW Requests: %lld\n"
		  "Number of FW out of resources: %lld\n"
		  "Number of FW IO errors: %lld\n",
		  (u64)atomic64_read(&stats->fw_stats.active_fw_reqs),
		  (u64)atomic64_read(&stats->fw_stats.max_fw_reqs),
		  (u64)atomic64_read(&stats->fw_stats.fw_out_of_resources),
		  (u64)atomic64_read(&stats->fw_stats.io_fw_errs));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tVlan Discovery Statistics\n"
		  "------------------------------------------\n");

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Number of Vlan Discovery Requests Sent %lld\n"
		  "Vlan Response Received with no FCF VLAN ID: %lld\n"
		  "No solicitations recvd after vlan set, expiry count: %lld\n"
		  "Flogi rejects count: %lld\n",
		  (u64)atomic64_read(&stats->vlan_stats.vlan_disc_reqs),
		  (u64)atomic64_read(&stats->vlan_stats.resp_withno_vlanID),
		  (u64)atomic64_read(&stats->vlan_stats.sol_expiry_count),
		  (u64)atomic64_read(&stats->vlan_stats.flogi_rejects));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "\n------------------------------------------\n"
		  "\t\tOther Important Statistics\n"
		  "------------------------------------------\n");

	jiffies_to_timespec64(stats->misc_stats.last_isr_time, &val1);
	jiffies_to_timespec64(stats->misc_stats.last_ack_time, &val2);

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
		  "Last ISR time: %llu (%8llu.%09lu)\n"
		  "Last ACK time: %llu (%8llu.%09lu)\n"
		  "Max ISR jiffies: %llu\n"
		  "Max ISR time (ms) (0 denotes < 1 ms): %llu\n"
		  "Corr. work done: %llu\n"
		  "Number of ISRs: %lld\n"
		  "Maximum CQ Entries: %lld\n"
		  "Number of ACK index out of range: %lld\n"
		  "Number of data count mismatch: %lld\n"
		  "Number of FCPIO Timeouts: %lld\n"
		  "Number of FCPIO Aborted: %lld\n"
		  "Number of SGL Invalid: %lld\n"
		  "Number of Copy WQ Alloc Failures for ABTs: %lld\n"
		  "Number of Copy WQ Alloc Failures for Device Reset: %lld\n"
		  "Number of Copy WQ Alloc Failures for IOs: %lld\n"
		  "Number of no icmnd itmf Completions: %lld\n"
		  "Number of Check Conditions encountered: %lld\n"
		  "Number of QUEUE Fulls: %lld\n"
		  "Number of rport not ready: %lld\n"
		  "Number of receive frame errors: %lld\n",
		  (u64)stats->misc_stats.last_isr_time,
		  (s64)val1.tv_sec, val1.tv_nsec,
		  (u64)stats->misc_stats.last_ack_time,
		  (s64)val2.tv_sec, val2.tv_nsec,
		  (u64)atomic64_read(&stats->misc_stats.max_isr_jiffies),
		  (u64)atomic64_read(&stats->misc_stats.max_isr_time_ms),
		  (u64)atomic64_read(&stats->misc_stats.corr_work_done),
		  (u64)atomic64_read(&stats->misc_stats.isr_count),
		  (u64)atomic64_read(&stats->misc_stats.max_cq_entries),
		  (u64)atomic64_read(&stats->misc_stats.ack_index_out_of_range),
		  (u64)atomic64_read(&stats->misc_stats.data_count_mismatch),
		  (u64)atomic64_read(&stats->misc_stats.fcpio_timeout),
		  (u64)atomic64_read(&stats->misc_stats.fcpio_aborted),
		  (u64)atomic64_read(&stats->misc_stats.sgl_invalid),
		  (u64)atomic64_read(
			  &stats->misc_stats.abts_cpwq_alloc_failures),
		  (u64)atomic64_read(
			  &stats->misc_stats.devrst_cpwq_alloc_failures),
		  (u64)atomic64_read(&stats->misc_stats.io_cpwq_alloc_failures),
		  (u64)atomic64_read(&stats->misc_stats.no_icmnd_itmf_cmpls),
		  (u64)atomic64_read(&stats->misc_stats.check_condition),
		  (u64)atomic64_read(&stats->misc_stats.queue_fulls),
		  (u64)atomic64_read(&stats->misc_stats.rport_not_ready),
		  (u64)atomic64_read(&stats->misc_stats.frame_errors));

	len += scnprintf(debug->debug_buffer + len, buf_size - len,
			"Firmware reported port speed: %llu\n",
			(u64)atomic64_read(
				&stats->misc_stats.current_port_speed));

	return len;

}