perf evsel: Introduce mmap support
[deliverable/linux.git] / tools / perf / util / evlist.c
CommitLineData
5c581041 1#include <poll.h>
361c99a6
ACM
2#include "evlist.h"
3#include "evsel.h"
4#include "util.h"
5
6struct perf_evlist *perf_evlist__new(void)
7{
8 struct perf_evlist *evlist = zalloc(sizeof(*evlist));
9
10 if (evlist != NULL) {
11 INIT_LIST_HEAD(&evlist->entries);
12 }
13
14 return evlist;
15}
16
17static void perf_evlist__purge(struct perf_evlist *evlist)
18{
19 struct perf_evsel *pos, *n;
20
21 list_for_each_entry_safe(pos, n, &evlist->entries, node) {
22 list_del_init(&pos->node);
23 perf_evsel__delete(pos);
24 }
25
26 evlist->nr_entries = 0;
27}
28
29void perf_evlist__delete(struct perf_evlist *evlist)
30{
31 perf_evlist__purge(evlist);
5c581041 32 free(evlist->pollfd);
361c99a6
ACM
33 free(evlist);
34}
35
36void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
37{
38 list_add_tail(&entry->node, &evlist->entries);
39 ++evlist->nr_entries;
40}
41
42int perf_evlist__add_default(struct perf_evlist *evlist)
43{
44 struct perf_event_attr attr = {
45 .type = PERF_TYPE_HARDWARE,
46 .config = PERF_COUNT_HW_CPU_CYCLES,
47 };
48 struct perf_evsel *evsel = perf_evsel__new(&attr, 0);
49
50 if (evsel == NULL)
51 return -ENOMEM;
52
53 perf_evlist__add(evlist, evsel);
54 return 0;
55}
5c581041
ACM
56
57int perf_evlist__alloc_pollfd(struct perf_evlist *evlist, int ncpus, int nthreads)
58{
59 int nfds = ncpus * nthreads * evlist->nr_entries;
60 evlist->pollfd = malloc(sizeof(struct pollfd) * nfds);
61 return evlist->pollfd != NULL ? 0 : -ENOMEM;
62}
70082dd9
ACM
63
64void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd)
65{
66 fcntl(fd, F_SETFL, O_NONBLOCK);
67 evlist->pollfd[evlist->nr_fds].fd = fd;
68 evlist->pollfd[evlist->nr_fds].events = POLLIN;
69 evlist->nr_fds++;
70}
This page took 0.061936 seconds and 5 git commands to generate.