]> Pileus Git - ~andy/linux/blobdiff - tools/perf/util/evlist.c
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville...
[~andy/linux] / tools / perf / util / evlist.c
index 1986d8051bd16a9f133159545fb7083df3511d76..7400fb3fc50c91910a51eb3dc6a679ca6e4a05de 100644 (file)
@@ -11,6 +11,7 @@
 #include <poll.h>
 #include "cpumap.h"
 #include "thread_map.h"
+#include "target.h"
 #include "evlist.h"
 #include "evsel.h"
 #include <unistd.h>
@@ -158,6 +159,17 @@ out_delete_partial_list:
        return -1;
 }
 
+int __perf_evlist__add_default_attrs(struct perf_evlist *evlist,
+                                    struct perf_event_attr *attrs, size_t nr_attrs)
+{
+       size_t i;
+
+       for (i = 0; i < nr_attrs; i++)
+               event_attr_init(attrs + i);
+
+       return perf_evlist__add_attrs(evlist, attrs, nr_attrs);
+}
+
 static int trace_event__id(const char *evname)
 {
        char *filename, *colon;
@@ -262,7 +274,8 @@ void perf_evlist__disable(struct perf_evlist *evlist)
        for (cpu = 0; cpu < evlist->cpus->nr; cpu++) {
                list_for_each_entry(pos, &evlist->entries, node) {
                        for (thread = 0; thread < evlist->threads->nr; thread++)
-                               ioctl(FD(pos, cpu, thread), PERF_EVENT_IOC_DISABLE);
+                               ioctl(FD(pos, cpu, thread),
+                                     PERF_EVENT_IOC_DISABLE, 0);
                }
        }
 }
@@ -275,7 +288,8 @@ void perf_evlist__enable(struct perf_evlist *evlist)
        for (cpu = 0; cpu < evlist->cpus->nr; cpu++) {
                list_for_each_entry(pos, &evlist->entries, node) {
                        for (thread = 0; thread < evlist->threads->nr; thread++)
-                               ioctl(FD(pos, cpu, thread), PERF_EVENT_IOC_ENABLE);
+                               ioctl(FD(pos, cpu, thread),
+                                     PERF_EVENT_IOC_ENABLE, 0);
                }
        }
 }
@@ -599,18 +613,21 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
        return perf_evlist__mmap_per_cpu(evlist, prot, mask);
 }
 
-int perf_evlist__create_maps(struct perf_evlist *evlist, const char *target_pid,
-                            const char *target_tid, uid_t uid, const char *cpu_list)
+int perf_evlist__create_maps(struct perf_evlist *evlist,
+                            struct perf_target *target)
 {
-       evlist->threads = thread_map__new_str(target_pid, target_tid, uid);
+       evlist->threads = thread_map__new_str(target->pid, target->tid,
+                                             target->uid);
 
        if (evlist->threads == NULL)
                return -1;
 
-       if (uid != UINT_MAX || (cpu_list == NULL && target_tid))
+       if (perf_target__has_task(target))
+               evlist->cpus = cpu_map__dummy_new();
+       else if (!perf_target__has_cpu(target) && !target->uses_mmap)
                evlist->cpus = cpu_map__dummy_new();
        else
-               evlist->cpus = cpu_map__new(cpu_list);
+               evlist->cpus = cpu_map__new(target->cpu_list);
 
        if (evlist->cpus == NULL)
                goto out_delete_threads;
@@ -827,7 +844,7 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist,
                exit(-1);
        }
 
-       if (!opts->system_wide && !opts->target_tid && !opts->target_pid)
+       if (perf_target__none(&opts->target))
                evlist->threads->map[0] = evlist->workload.pid;
 
        close(child_ready_pipe[1]);