Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3567dca1 authored by Satish Kharat's avatar Satish Kharat Committed by Martin K. Petersen
Browse files

scsi: fnic: fnic stats for max CQs processed and ISR time



This change is to add fnic stats for the max number of CQs (corresponding
to copy WQ) processed in a given interrupt, max time taken by the ISR.

Signed-off-by: default avatarSatish Kharat <satishkh@cisco.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d948e638
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1325,13 +1325,32 @@ int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do)
	unsigned int wq_work_done = 0;
	unsigned int i, cq_index;
	unsigned int cur_work_done;
	struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
	u64 start_jiffies = 0;
	u64 end_jiffies = 0;
	u64 delta_jiffies = 0;
	u64 delta_ms = 0;

	for (i = 0; i < fnic->wq_copy_count; i++) {
		cq_index = i + fnic->raw_wq_count + fnic->rq_count;

		start_jiffies = jiffies;
		cur_work_done = vnic_cq_copy_service(&fnic->cq[cq_index],
						     fnic_fcpio_cmpl_handler,
						     copy_work_to_do);
		end_jiffies = jiffies;

		wq_work_done += cur_work_done;
		delta_jiffies = end_jiffies - start_jiffies;
		if (delta_jiffies >
			(u64) atomic64_read(&misc_stats->max_isr_jiffies)) {
			atomic64_set(&misc_stats->max_isr_jiffies,
					delta_jiffies);
			delta_ms = jiffies_to_msecs(delta_jiffies);
			atomic64_set(&misc_stats->max_isr_time_ms, delta_ms);
			atomic64_set(&misc_stats->corr_work_done,
					cur_work_done);
		}
	}
	return wq_work_done;
}
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@ struct vlan_stats {
struct misc_stats {
	u64 last_isr_time;
	u64 last_ack_time;
	atomic64_t max_isr_jiffies;
	atomic64_t max_isr_time_ms;
	atomic64_t corr_work_done;
	atomic64_t isr_count;
	atomic64_t max_cq_entries;
	atomic64_t ack_index_out_of_range;
+6 −0
Original line number Diff line number Diff line
@@ -409,6 +409,9 @@ int fnic_get_stats_data(struct stats_debug_info *debug,
	len += snprintf(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"
@@ -428,6 +431,9 @@ int fnic_get_stats_data(struct stats_debug_info *debug,
		  (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),