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

Commit 7579dfc4 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge tag 'perf-urgent-for-mingo-5.1-20190419' of...

Merge tag 'perf-urgent-for-mingo-5.1-20190419' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

 into perf/urgent

Pull perf/urgent fixes from Arnaldo Carvalho de Melo:

perf top:

  Jiri Olsa:

  - Fix 'perf top --pid', it needs PERF_SAMPLE_TIME since we switched to using
    a different thread to sort the events and then even for just a single
    thread we now need timestamps.

BPF:

  Jiri Olsa:

  - Fix bpf_prog and btf lookup functions failure path to to properly return
    NULL.

  - Fix side band thread draining, used to process PERF_RECORD_BPF_EVENT
    metadata records.

core:

  Jiri Olsa:

  - Fix map lookup by name to get a refcount when the name is already in
    the tree. Found

  Song Liu:

  - Fix __map__is_kmodule() by taking into account recently added BPF
    maps.

UAPI:

  Arnaldo Carvalho de Melo:

  - Sync sound/asound.h copy

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents b191fa96 2db7b1e0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@

#ifndef __KERNEL__
#include <stdlib.h>
#include <time.h>
#endif

/*
+1 −0
Original line number Diff line number Diff line
@@ -1377,6 +1377,7 @@ int cmd_top(int argc, const char **argv)
			 * */
			.overwrite	= 0,
			.sample_time	= true,
			.sample_time_set = true,
		},
		.max_stack	     = sysctl__max_stack(),
		.annotation_opts     = annotation__default_options,
+6 −2
Original line number Diff line number Diff line
@@ -57,9 +57,11 @@ struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
		else if (prog_id > node->info_linear->info.id)
			n = n->rb_right;
		else
			break;
			goto out;
	}
	node = NULL;

out:
	up_read(&env->bpf_progs.lock);
	return node;
}
@@ -109,10 +111,12 @@ struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id)
		else if (btf_id > node->id)
			n = n->rb_right;
		else
			break;
			goto out;
	}
	node = NULL;

	up_read(&env->bpf_progs.lock);
out:
	return node;
}

+9 −5
Original line number Diff line number Diff line
@@ -1868,12 +1868,12 @@ static void *perf_evlist__poll_thread(void *arg)
{
	struct perf_evlist *evlist = arg;
	bool draining = false;
	int i;
	int i, done = 0;

	while (!done) {
		bool got_data = false;

	while (draining || !(evlist->thread.done)) {
		if (draining)
			draining = false;
		else if (evlist->thread.done)
		if (evlist->thread.done)
			draining = true;

		if (!draining)
@@ -1894,9 +1894,13 @@ static void *perf_evlist__poll_thread(void *arg)
					pr_warning("cannot locate proper evsel for the side band event\n");

				perf_mmap__consume(map);
				got_data = true;
			}
			perf_mmap__read_done(map);
		}

		if (draining && !got_data)
			break;
	}
	return NULL;
}
+17 −3
Original line number Diff line number Diff line
@@ -261,6 +261,22 @@ bool __map__is_extra_kernel_map(const struct map *map)
	return kmap && kmap->name[0];
}

bool __map__is_bpf_prog(const struct map *map)
{
	const char *name;

	if (map->dso->binary_type == DSO_BINARY_TYPE__BPF_PROG_INFO)
		return true;

	/*
	 * If PERF_RECORD_BPF_EVENT is not included, the dso will not have
	 * type of DSO_BINARY_TYPE__BPF_PROG_INFO. In such cases, we can
	 * guess the type based on name.
	 */
	name = map->dso->short_name;
	return name && (strstr(name, "bpf_prog_") == name);
}

bool map__has_symbols(const struct map *map)
{
	return dso__has_symbols(map->dso);
@@ -910,10 +926,8 @@ static void __maps__insert_name(struct maps *maps, struct map *map)
		rc = strcmp(m->dso->short_name, map->dso->short_name);
		if (rc < 0)
			p = &(*p)->rb_left;
		else if (rc  > 0)
			p = &(*p)->rb_right;
		else
			return;
			p = &(*p)->rb_right;
	}
	rb_link_node(&map->rb_node_name, parent, p);
	rb_insert_color(&map->rb_node_name, &maps->names);
Loading