mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
perf evsel: Add support for enabling counters
Add support for enabling already set up counters by using an ioctl. I share some code with the filter setup. Signed-off-by: Andi Kleen <ak@linux.intel.com> Reviewed-by: Jiri Olsa <jolsa@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1375490473-1503-3-git-send-email-andi@firstfloor.org [ Fixed up 'err' variable indentation ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
5c6974f498
commit
e2407bef96
@ -634,15 +634,15 @@ int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
|
|||||||
return evsel->fd != NULL ? 0 : -ENOMEM;
|
return evsel->fd != NULL ? 0 : -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
int perf_evsel__set_filter(struct perf_evsel *evsel, int ncpus, int nthreads,
|
static int perf_evsel__run_ioctl(struct perf_evsel *evsel, int ncpus, int nthreads,
|
||||||
const char *filter)
|
int ioc, void *arg)
|
||||||
{
|
{
|
||||||
int cpu, thread;
|
int cpu, thread;
|
||||||
|
|
||||||
for (cpu = 0; cpu < ncpus; cpu++) {
|
for (cpu = 0; cpu < ncpus; cpu++) {
|
||||||
for (thread = 0; thread < nthreads; thread++) {
|
for (thread = 0; thread < nthreads; thread++) {
|
||||||
int fd = FD(evsel, cpu, thread),
|
int fd = FD(evsel, cpu, thread),
|
||||||
err = ioctl(fd, PERF_EVENT_IOC_SET_FILTER, filter);
|
err = ioctl(fd, ioc, arg);
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -652,6 +652,21 @@ int perf_evsel__set_filter(struct perf_evsel *evsel, int ncpus, int nthreads,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int perf_evsel__set_filter(struct perf_evsel *evsel, int ncpus, int nthreads,
|
||||||
|
const char *filter)
|
||||||
|
{
|
||||||
|
return perf_evsel__run_ioctl(evsel, ncpus, nthreads,
|
||||||
|
PERF_EVENT_IOC_SET_FILTER,
|
||||||
|
(void *)filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
int perf_evsel__enable(struct perf_evsel *evsel, int ncpus, int nthreads)
|
||||||
|
{
|
||||||
|
return perf_evsel__run_ioctl(evsel, ncpus, nthreads,
|
||||||
|
PERF_EVENT_IOC_ENABLE,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads)
|
int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads)
|
||||||
{
|
{
|
||||||
evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
|
evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
|
||||||
|
@ -146,6 +146,7 @@ void perf_evsel__set_sample_id(struct perf_evsel *evsel);
|
|||||||
|
|
||||||
int perf_evsel__set_filter(struct perf_evsel *evsel, int ncpus, int nthreads,
|
int perf_evsel__set_filter(struct perf_evsel *evsel, int ncpus, int nthreads,
|
||||||
const char *filter);
|
const char *filter);
|
||||||
|
int perf_evsel__enable(struct perf_evsel *evsel, int ncpus, int nthreads);
|
||||||
|
|
||||||
int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
|
int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
|
||||||
struct cpu_map *cpus);
|
struct cpu_map *cpus);
|
||||||
|
Loading…
Reference in New Issue
Block a user