Commit | Line | Data |
---|---|---|
5c581041 | 1 | #include <poll.h> |
361c99a6 ACM |
2 | #include "evlist.h" |
3 | #include "evsel.h" | |
4 | #include "util.h" | |
5 | ||
6 | struct 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 | ||
17 | static 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 | ||
29 | void 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 | ||
36 | void 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 | ||
42 | int 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 | |
57 | int 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 | |
64 | void 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 | } |