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

Commit 3154da34 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fixes from Ingo Molnar:
 "Misc fixes, most of them on the tooling side"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf tools: Fix strict alias issue for find_first_bit
  perf tools: fix BFD detection on opensuse
  perf: Fix hotplug splat
  perf/x86: Fix event scheduling
  perf symbols: Destroy unused symsrcs
  perf annotate: Check availability of annotate when processing samples
parents 55de1ed2 af76815a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1192,6 +1192,9 @@ static void x86_pmu_del(struct perf_event *event, int flags)
	for (i = 0; i < cpuc->n_events; i++) {
		if (event == cpuc->event_list[i]) {

			if (i >= cpuc->n_events - cpuc->n_added)
				--cpuc->n_added;

			if (x86_pmu.put_event_constraints)
				x86_pmu.put_event_constraints(cpuc, event);

+6 −6
Original line number Diff line number Diff line
@@ -7856,14 +7856,14 @@ static void perf_pmu_rotate_stop(struct pmu *pmu)
static void __perf_event_exit_context(void *__info)
{
	struct perf_event_context *ctx = __info;
	struct perf_event *event, *tmp;
	struct perf_event *event;

	perf_pmu_rotate_stop(ctx->pmu);

	list_for_each_entry_safe(event, tmp, &ctx->pinned_groups, group_entry)
		__perf_remove_from_context(event);
	list_for_each_entry_safe(event, tmp, &ctx->flexible_groups, group_entry)
	rcu_read_lock();
	list_for_each_entry_rcu(event, &ctx->event_list, event_entry)
		__perf_remove_from_context(event);
	rcu_read_unlock();
}

static void perf_event_exit_cpu_context(int cpu)
@@ -7887,11 +7887,11 @@ static void perf_event_exit_cpu(int cpu)
{
	struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);

	perf_event_exit_cpu_context(cpu);

	mutex_lock(&swhash->hlist_mutex);
	swevent_hlist_release(swhash);
	mutex_unlock(&swhash->hlist_mutex);

	perf_event_exit_cpu_context(cpu);
}
#else
static inline void perf_event_exit_cpu(int cpu) { }
+24 −16
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ static int report__add_mem_hist_entry(struct perf_tool *tool, struct addr_locati
	if (!he)
		return -ENOMEM;

	if (ui__has_annotation()) {
		err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
		if (err)
			goto out;
@@ -121,6 +122,7 @@ static int report__add_mem_hist_entry(struct perf_tool *tool, struct addr_locati
		err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
		if (err)
			goto out;
	}

	evsel->hists.stats.total_period += cost;
	hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
@@ -164,14 +166,18 @@ static int report__add_branch_hist_entry(struct perf_tool *tool, struct addr_loc
		he = __hists__add_entry(&evsel->hists, al, parent, &bi[i], NULL,
					1, 1, 0);
		if (he) {
			if (ui__has_annotation()) {
				bx = he->branch_info;
			err = addr_map_symbol__inc_samples(&bx->from, evsel->idx);
				err = addr_map_symbol__inc_samples(&bx->from,
								   evsel->idx);
				if (err)
					goto out;

			err = addr_map_symbol__inc_samples(&bx->to, evsel->idx);
				err = addr_map_symbol__inc_samples(&bx->to,
								   evsel->idx);
				if (err)
					goto out;
			}

			evsel->hists.stats.total_period += 1;
			hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
@@ -205,7 +211,9 @@ static int report__add_hist_entry(struct perf_tool *tool, struct perf_evsel *evs
	if (err)
		goto out;

	if (ui__has_annotation())
		err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);

	evsel->hists.stats.total_period += sample->period;
	hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
out:
+4 −2
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ static void perf_top__record_precise_ip(struct perf_top *top,
{
	struct annotation *notes;
	struct symbol *sym;
	int err;
	int err = 0;

	if (he == NULL || he->ms.sym == NULL ||
	    ((top->sym_filter_entry == NULL ||
@@ -190,6 +190,8 @@ static void perf_top__record_precise_ip(struct perf_top *top,
		return;

	ip = he->ms.map->map_ip(he->ms.map, ip);

	if (ui__has_annotation())
		err = hist_entry__inc_addr_samples(he, counter, ip);

	pthread_mutex_unlock(&notes->lock);
+1 −1
Original line number Diff line number Diff line
@@ -478,7 +478,7 @@ else
endif

ifeq ($(feature-libbfd), 1)
  EXTLIBS += -lbfd
  EXTLIBS += -lbfd -lz -liberty
endif

ifdef NO_DEMANGLE
Loading