diff options
Diffstat (limited to 'tools/lib/perf/evsel.c')
| -rw-r--r-- | tools/lib/perf/evsel.c | 34 | 
1 files changed, 27 insertions, 7 deletions
diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c index 210ea7c06ce8..c1d58673f6ef 100644 --- a/tools/lib/perf/evsel.c +++ b/tools/lib/perf/evsel.c @@ -328,6 +328,17 @@ int perf_evsel__read(struct perf_evsel *evsel, int cpu_map_idx, int thread,  	return 0;  } +static int perf_evsel__ioctl(struct perf_evsel *evsel, int ioc, void *arg, +			     int cpu_map_idx, int thread) +{ +	int *fd = FD(evsel, cpu_map_idx, thread); + +	if (fd == NULL || *fd < 0) +		return -1; + +	return ioctl(*fd, ioc, arg); +} +  static int perf_evsel__run_ioctl(struct perf_evsel *evsel,  				 int ioc,  void *arg,  				 int cpu_map_idx) @@ -335,13 +346,7 @@ static int perf_evsel__run_ioctl(struct perf_evsel *evsel,  	int thread;  	for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { -		int err; -		int *fd = FD(evsel, cpu_map_idx, thread); - -		if (fd == NULL || *fd < 0) -			return -1; - -		err = ioctl(*fd, ioc, arg); +		int err = perf_evsel__ioctl(evsel, ioc, arg, cpu_map_idx, thread);  		if (err)  			return err; @@ -355,6 +360,21 @@ int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx)  	return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, cpu_map_idx);  } +int perf_evsel__enable_thread(struct perf_evsel *evsel, int thread) +{ +	struct perf_cpu cpu __maybe_unused; +	int idx; +	int err; + +	perf_cpu_map__for_each_cpu(cpu, idx, evsel->cpus) { +		err = perf_evsel__ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, idx, thread); +		if (err) +			return err; +	} + +	return 0; +} +  int perf_evsel__enable(struct perf_evsel *evsel)  {  	int i;  | 
