mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	perf hist: Pass struct sample to __hists__add_entry()
This is a preparation to add more info into the hist_entry. Also it already passes too many argument, so passing sample directly will reduce the overhead of the function call. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1450804030-29193-2-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									9cc2617de5
								
							
						
					
					
						commit
						fd36f3dd79
					
				
					 5 changed files with 32 additions and 27 deletions
				
			
		| 
						 | 
				
			
			@ -47,7 +47,7 @@ struct perf_annotate {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
static int perf_evsel__add_sample(struct perf_evsel *evsel,
 | 
			
		||||
				  struct perf_sample *sample __maybe_unused,
 | 
			
		||||
				  struct perf_sample *sample,
 | 
			
		||||
				  struct addr_location *al,
 | 
			
		||||
				  struct perf_annotate *ann)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,10 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel,
 | 
			
		|||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(hists, al, NULL, NULL, NULL, 1, 1, 0, true);
 | 
			
		||||
	sample->period = 1;
 | 
			
		||||
	sample->weight = 1;
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(hists, al, NULL, NULL, NULL, sample, true);
 | 
			
		||||
	if (he == NULL)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,11 +311,11 @@ static int formula_fprintf(struct hist_entry *he, struct hist_entry *pair,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static int hists__add_entry(struct hists *hists,
 | 
			
		||||
			    struct addr_location *al, u64 period,
 | 
			
		||||
			    u64 weight, u64 transaction)
 | 
			
		||||
			    struct addr_location *al,
 | 
			
		||||
			    struct perf_sample *sample)
 | 
			
		||||
{
 | 
			
		||||
	if (__hists__add_entry(hists, al, NULL, NULL, NULL, period, weight,
 | 
			
		||||
			       transaction, true) != NULL)
 | 
			
		||||
	if (__hists__add_entry(hists, al, NULL, NULL, NULL,
 | 
			
		||||
			       sample, true) != NULL)
 | 
			
		||||
		return 0;
 | 
			
		||||
	return -ENOMEM;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -336,8 +336,7 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused,
 | 
			
		|||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (hists__add_entry(hists, &al, sample->period,
 | 
			
		||||
			     sample->weight, sample->transaction)) {
 | 
			
		||||
	if (hists__add_entry(hists, &al, sample)) {
 | 
			
		||||
		pr_warning("problem incrementing symbol period, skipping event\n");
 | 
			
		||||
		goto out_put;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
 | 
			
		|||
	struct perf_evsel *evsel;
 | 
			
		||||
	struct addr_location al;
 | 
			
		||||
	struct hist_entry *he;
 | 
			
		||||
	struct perf_sample sample = { .period = 1, };
 | 
			
		||||
	struct perf_sample sample = { .period = 1, .weight = 1, };
 | 
			
		||||
	size_t i = 0, k;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
 | 
			
		|||
				goto out;
 | 
			
		||||
 | 
			
		||||
			he = __hists__add_entry(hists, &al, NULL,
 | 
			
		||||
						NULL, NULL, 1, 1, 0, true);
 | 
			
		||||
						NULL, NULL, &sample, true);
 | 
			
		||||
			if (he == NULL) {
 | 
			
		||||
				addr_location__put(&al);
 | 
			
		||||
				goto out;
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
 | 
			
		|||
				goto out;
 | 
			
		||||
 | 
			
		||||
			he = __hists__add_entry(hists, &al, NULL,
 | 
			
		||||
						NULL, NULL, 1, 1, 0, true);
 | 
			
		||||
						NULL, NULL, &sample, true);
 | 
			
		||||
			if (he == NULL) {
 | 
			
		||||
				addr_location__put(&al);
 | 
			
		||||
				goto out;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -461,7 +461,7 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
 | 
			
		|||
				      struct symbol *sym_parent,
 | 
			
		||||
				      struct branch_info *bi,
 | 
			
		||||
				      struct mem_info *mi,
 | 
			
		||||
				      u64 period, u64 weight, u64 transaction,
 | 
			
		||||
				      struct perf_sample *sample,
 | 
			
		||||
				      bool sample_self)
 | 
			
		||||
{
 | 
			
		||||
	struct hist_entry entry = {
 | 
			
		||||
| 
						 | 
				
			
			@ -478,15 +478,15 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
 | 
			
		|||
		.level	 = al->level,
 | 
			
		||||
		.stat = {
 | 
			
		||||
			.nr_events = 1,
 | 
			
		||||
			.period	= period,
 | 
			
		||||
			.weight = weight,
 | 
			
		||||
			.period	= sample->period,
 | 
			
		||||
			.weight = sample->weight,
 | 
			
		||||
		},
 | 
			
		||||
		.parent = sym_parent,
 | 
			
		||||
		.filtered = symbol__parent_filter(sym_parent) | al->filtered,
 | 
			
		||||
		.hists	= hists,
 | 
			
		||||
		.branch_info = bi,
 | 
			
		||||
		.mem_info = mi,
 | 
			
		||||
		.transaction = transaction,
 | 
			
		||||
		.transaction = sample->transaction,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	return hists__findnew_entry(hists, &entry, al, sample_self);
 | 
			
		||||
| 
						 | 
				
			
			@ -526,12 +526,13 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
 | 
			
		|||
	u64 cost;
 | 
			
		||||
	struct mem_info *mi = iter->priv;
 | 
			
		||||
	struct hists *hists = evsel__hists(iter->evsel);
 | 
			
		||||
	struct perf_sample *sample = iter->sample;
 | 
			
		||||
	struct hist_entry *he;
 | 
			
		||||
 | 
			
		||||
	if (mi == NULL)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	cost = iter->sample->weight;
 | 
			
		||||
	cost = sample->weight;
 | 
			
		||||
	if (!cost)
 | 
			
		||||
		cost = 1;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -542,8 +543,10 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
 | 
			
		|||
	 * and this is indirectly achieved by passing period=weight here
 | 
			
		||||
	 * and the he_stat__add_period() function.
 | 
			
		||||
	 */
 | 
			
		||||
	sample->period = cost;
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(hists, al, iter->parent, NULL, mi,
 | 
			
		||||
				cost, cost, 0, true);
 | 
			
		||||
				sample, true);
 | 
			
		||||
	if (!he)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -630,6 +633,7 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
 | 
			
		|||
	struct branch_info *bi;
 | 
			
		||||
	struct perf_evsel *evsel = iter->evsel;
 | 
			
		||||
	struct hists *hists = evsel__hists(evsel);
 | 
			
		||||
	struct perf_sample *sample = iter->sample;
 | 
			
		||||
	struct hist_entry *he = NULL;
 | 
			
		||||
	int i = iter->curr;
 | 
			
		||||
	int err = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -643,9 +647,11 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
 | 
			
		|||
	 * The report shows the percentage of total branches captured
 | 
			
		||||
	 * and not events sampled. Thus we use a pseudo period of 1.
 | 
			
		||||
	 */
 | 
			
		||||
	sample->period = 1;
 | 
			
		||||
	sample->weight = bi->flags.cycles ? bi->flags.cycles : 1;
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(hists, al, iter->parent, &bi[i], NULL,
 | 
			
		||||
				1, bi->flags.cycles ? bi->flags.cycles : 1,
 | 
			
		||||
				0, true);
 | 
			
		||||
				sample, true);
 | 
			
		||||
	if (he == NULL)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -682,8 +688,7 @@ iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location
 | 
			
		|||
	struct hist_entry *he;
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
 | 
			
		||||
				sample->period, sample->weight,
 | 
			
		||||
				sample->transaction, true);
 | 
			
		||||
				sample, true);
 | 
			
		||||
	if (he == NULL)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -744,8 +749,7 @@ iter_add_single_cumulative_entry(struct hist_entry_iter *iter,
 | 
			
		|||
	int err = 0;
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(hists, al, iter->parent, NULL, NULL,
 | 
			
		||||
				sample->period, sample->weight,
 | 
			
		||||
				sample->transaction, true);
 | 
			
		||||
				sample, true);
 | 
			
		||||
	if (he == NULL)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -818,8 +822,7 @@ iter_add_next_cumulative_entry(struct hist_entry_iter *iter,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
 | 
			
		||||
				sample->period, sample->weight,
 | 
			
		||||
				sample->transaction, false);
 | 
			
		||||
				sample, false);
 | 
			
		||||
	if (he == NULL)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,8 +114,8 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
 | 
			
		|||
				      struct addr_location *al,
 | 
			
		||||
				      struct symbol *parent,
 | 
			
		||||
				      struct branch_info *bi,
 | 
			
		||||
				      struct mem_info *mi, u64 period,
 | 
			
		||||
				      u64 weight, u64 transaction,
 | 
			
		||||
				      struct mem_info *mi,
 | 
			
		||||
				      struct perf_sample *sample,
 | 
			
		||||
				      bool sample_self);
 | 
			
		||||
int hist_entry_iter__add(struct hist_entry_iter *iter, struct addr_location *al,
 | 
			
		||||
			 int max_stack_depth, void *arg);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue