|
@@ -175,7 +175,7 @@ int __perf_evsel__read(struct perf_evsel *evsel,
|
|
|
}
|
|
|
|
|
|
static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
|
|
|
- struct thread_map *threads, bool group, bool inherit)
|
|
|
+ struct thread_map *threads, bool group)
|
|
|
{
|
|
|
int cpu, thread;
|
|
|
unsigned long flags = 0;
|
|
@@ -192,19 +192,6 @@ static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
|
|
|
|
|
|
for (cpu = 0; cpu < cpus->nr; cpu++) {
|
|
|
int group_fd = -1;
|
|
|
- /*
|
|
|
- * Don't allow mmap() of inherited per-task counters. This
|
|
|
- * would create a performance issue due to all children writing
|
|
|
- * to the same buffer.
|
|
|
- *
|
|
|
- * FIXME:
|
|
|
- * Proper fix is not to pass 'inherit' to perf_evsel__open*,
|
|
|
- * but a 'flags' parameter, with 'group' folded there as well,
|
|
|
- * then introduce a PERF_O_{MMAP,GROUP,INHERIT} enum, and if
|
|
|
- * O_MMAP is set, emit a warning if cpu < 0 and O_INHERIT is
|
|
|
- * set. Lets go for the minimal fix first tho.
|
|
|
- */
|
|
|
- evsel->attr.inherit = (cpus->map[cpu] >= 0) && inherit;
|
|
|
|
|
|
for (thread = 0; thread < threads->nr; thread++) {
|
|
|
|
|
@@ -253,7 +240,7 @@ static struct {
|
|
|
};
|
|
|
|
|
|
int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
|
|
|
- struct thread_map *threads, bool group, bool inherit)
|
|
|
+ struct thread_map *threads, bool group)
|
|
|
{
|
|
|
if (cpus == NULL) {
|
|
|
/* Work around old compiler warnings about strict aliasing */
|
|
@@ -263,19 +250,19 @@ int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
|
|
|
if (threads == NULL)
|
|
|
threads = &empty_thread_map.map;
|
|
|
|
|
|
- return __perf_evsel__open(evsel, cpus, threads, group, inherit);
|
|
|
+ return __perf_evsel__open(evsel, cpus, threads, group);
|
|
|
}
|
|
|
|
|
|
int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
|
|
|
- struct cpu_map *cpus, bool group, bool inherit)
|
|
|
+ struct cpu_map *cpus, bool group)
|
|
|
{
|
|
|
- return __perf_evsel__open(evsel, cpus, &empty_thread_map.map, group, inherit);
|
|
|
+ return __perf_evsel__open(evsel, cpus, &empty_thread_map.map, group);
|
|
|
}
|
|
|
|
|
|
int perf_evsel__open_per_thread(struct perf_evsel *evsel,
|
|
|
- struct thread_map *threads, bool group, bool inherit)
|
|
|
+ struct thread_map *threads, bool group)
|
|
|
{
|
|
|
- return __perf_evsel__open(evsel, &empty_cpu_map.map, threads, group, inherit);
|
|
|
+ return __perf_evsel__open(evsel, &empty_cpu_map.map, threads, group);
|
|
|
}
|
|
|
|
|
|
static int perf_event__parse_id_sample(const union perf_event *event, u64 type,
|