Commit fd0584d2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'trace-tools-v6.13-rc4' of...

Merge tag 'trace-tools-v6.13-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace

Pull tracing tool fix from Steven Rostedt:

 - Fix rtla divide by zero when the count is zero in histograms

* tag 'trace-tools-v6.13-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
  rtla/timerlat: Fix histogram ALL for zero samples
parents 8379578b 6cc45f8c
Loading
Loading
Loading
Loading
+96 −81
Original line number Diff line number Diff line
@@ -281,6 +281,21 @@ static void timerlat_hist_header(struct osnoise_tool *tool)
	trace_seq_reset(s);
}

/*
 * format_summary_value - format a line of summary value (min, max or avg)
 * of hist data
 */
static void format_summary_value(struct trace_seq *seq,
				 int count,
				 unsigned long long val,
				 bool avg)
{
	if (count)
		trace_seq_printf(seq, "%9llu ", avg ? val / count : val);
	else
		trace_seq_printf(seq, "%9c ", '-');
}

/*
 * timerlat_print_summary - print the summary of the hist data to the output
 */
@@ -328,29 +343,23 @@ timerlat_print_summary(struct timerlat_hist_params *params,
		if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
			continue;

		if (!params->no_irq) {
			if (data->hist[cpu].irq_count)
				trace_seq_printf(trace->seq, "%9llu ",
						data->hist[cpu].min_irq);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_irq)
			format_summary_value(trace->seq,
					     data->hist[cpu].irq_count,
					     data->hist[cpu].min_irq,
					     false);

		if (!params->no_thread) {
			if (data->hist[cpu].thread_count)
				trace_seq_printf(trace->seq, "%9llu ",
						data->hist[cpu].min_thread);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_thread)
			format_summary_value(trace->seq,
					     data->hist[cpu].thread_count,
					     data->hist[cpu].min_thread,
					     false);

		if (params->user_hist) {
			if (data->hist[cpu].user_count)
				trace_seq_printf(trace->seq, "%9llu ",
						data->hist[cpu].min_user);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (params->user_hist)
			format_summary_value(trace->seq,
					     data->hist[cpu].user_count,
					     data->hist[cpu].min_user,
					     false);
	}
	trace_seq_printf(trace->seq, "\n");

@@ -364,29 +373,23 @@ timerlat_print_summary(struct timerlat_hist_params *params,
		if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
			continue;

		if (!params->no_irq) {
			if (data->hist[cpu].irq_count)
				trace_seq_printf(trace->seq, "%9llu ",
						 data->hist[cpu].sum_irq / data->hist[cpu].irq_count);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_irq)
			format_summary_value(trace->seq,
					     data->hist[cpu].irq_count,
					     data->hist[cpu].sum_irq,
					     true);

		if (!params->no_thread) {
			if (data->hist[cpu].thread_count)
				trace_seq_printf(trace->seq, "%9llu ",
						 data->hist[cpu].sum_thread / data->hist[cpu].thread_count);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_thread)
			format_summary_value(trace->seq,
					     data->hist[cpu].thread_count,
					     data->hist[cpu].sum_thread,
					     true);

		if (params->user_hist) {
			if (data->hist[cpu].user_count)
				trace_seq_printf(trace->seq, "%9llu ",
						 data->hist[cpu].sum_user / data->hist[cpu].user_count);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (params->user_hist)
			format_summary_value(trace->seq,
					     data->hist[cpu].user_count,
					     data->hist[cpu].sum_user,
					     true);
	}
	trace_seq_printf(trace->seq, "\n");

@@ -400,29 +403,23 @@ timerlat_print_summary(struct timerlat_hist_params *params,
		if (!data->hist[cpu].irq_count && !data->hist[cpu].thread_count)
			continue;

		if (!params->no_irq) {
			if (data->hist[cpu].irq_count)
				trace_seq_printf(trace->seq, "%9llu ",
						 data->hist[cpu].max_irq);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_irq)
			format_summary_value(trace->seq,
					     data->hist[cpu].irq_count,
					     data->hist[cpu].max_irq,
					     false);

		if (!params->no_thread) {
			if (data->hist[cpu].thread_count)
				trace_seq_printf(trace->seq, "%9llu ",
						data->hist[cpu].max_thread);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (!params->no_thread)
			format_summary_value(trace->seq,
					     data->hist[cpu].thread_count,
					     data->hist[cpu].max_thread,
					     false);

		if (params->user_hist) {
			if (data->hist[cpu].user_count)
				trace_seq_printf(trace->seq, "%9llu ",
						data->hist[cpu].max_user);
			else
				trace_seq_printf(trace->seq, "        - ");
		}
		if (params->user_hist)
			format_summary_value(trace->seq,
					     data->hist[cpu].user_count,
					     data->hist[cpu].max_user,
					     false);
	}
	trace_seq_printf(trace->seq, "\n");
	trace_seq_do_printf(trace->seq);
@@ -506,16 +503,22 @@ timerlat_print_stats_all(struct timerlat_hist_params *params,
		trace_seq_printf(trace->seq, "min:  ");

	if (!params->no_irq)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.min_irq);
		format_summary_value(trace->seq,
				     sum.irq_count,
				     sum.min_irq,
				     false);

	if (!params->no_thread)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.min_thread);
		format_summary_value(trace->seq,
				     sum.thread_count,
				     sum.min_thread,
				     false);

	if (params->user_hist)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.min_user);
		format_summary_value(trace->seq,
				     sum.user_count,
				     sum.min_user,
				     false);

	trace_seq_printf(trace->seq, "\n");

@@ -523,16 +526,22 @@ timerlat_print_stats_all(struct timerlat_hist_params *params,
		trace_seq_printf(trace->seq, "avg:  ");

	if (!params->no_irq)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.sum_irq / sum.irq_count);
		format_summary_value(trace->seq,
				     sum.irq_count,
				     sum.sum_irq,
				     true);

	if (!params->no_thread)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.sum_thread / sum.thread_count);
		format_summary_value(trace->seq,
				     sum.thread_count,
				     sum.sum_thread,
				     true);

	if (params->user_hist)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.sum_user / sum.user_count);
		format_summary_value(trace->seq,
				     sum.user_count,
				     sum.sum_user,
				     true);

	trace_seq_printf(trace->seq, "\n");

@@ -540,16 +549,22 @@ timerlat_print_stats_all(struct timerlat_hist_params *params,
		trace_seq_printf(trace->seq, "max:  ");

	if (!params->no_irq)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.max_irq);
		format_summary_value(trace->seq,
				     sum.irq_count,
				     sum.max_irq,
				     false);

	if (!params->no_thread)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.max_thread);
		format_summary_value(trace->seq,
				     sum.thread_count,
				     sum.max_thread,
				     false);

	if (params->user_hist)
		trace_seq_printf(trace->seq, "%9llu ",
				 sum.max_user);
		format_summary_value(trace->seq,
				     sum.user_count,
				     sum.max_user,
				     false);

	trace_seq_printf(trace->seq, "\n");
	trace_seq_do_printf(trace->seq);