cregit-Linux how code gets into the kernel

Release 4.10 tools/perf/util/evlist.c

Directory: tools/perf/util
/*
 * Copyright (C) 2011, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
 *
 * Parts came from builtin-{top,stat,record}.c, see those files for further
 * copyright notes.
 *
 * Released under the GPL v2. (and only v2, not any later version)
 */
#include "util.h"
#include <api/fs/fs.h>
#include <poll.h>
#include "cpumap.h"
#include "thread_map.h"
#include "target.h"
#include "evlist.h"
#include "evsel.h"
#include "debug.h"
#include "asm/bug.h"
#include <unistd.h>

#include "parse-events.h"
#include <subcmd/parse-options.h>

#include <sys/mman.h>

#include <linux/bitops.h>
#include <linux/hash.h>
#include <linux/log2.h>
#include <linux/err.h>

static void perf_mmap__munmap(struct perf_mmap *map);
static void perf_mmap__put(struct perf_mmap *map);


#define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y))

#define SID(e, x, y) xyarray__entry(e->sample_id, x, y)


void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus, struct thread_map *threads) { int i; for (i = 0; i < PERF_EVLIST__HLIST_SIZE; ++i) INIT_HLIST_HEAD(&evlist->heads[i]); INIT_LIST_HEAD(&evlist->entries); perf_evlist__set_maps(evlist, cpus, threads); fdarray__init(&evlist->pollfd, 64); evlist->workload.pid = -1; evlist->bkw_mmap_state = BKW_MMAP_NOTREADY; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo8393.26%685.71%
wang nanwang nan66.74%114.29%
Total89100.00%7100.00%


struct perf_evlist *perf_evlist__new(void) { struct perf_evlist *evlist = zalloc(sizeof(*evlist)); if (evlist != NULL) perf_evlist__init(evlist, NULL, NULL); return evlist; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo3892.68%375.00%
namhyung kimnamhyung kim37.32%125.00%
Total41100.00%4100.00%


struct perf_evlist *perf_evlist__new_default(void) { struct perf_evlist *evlist = perf_evlist__new(); if (evlist && perf_evlist__add_default(evlist)) { perf_evlist__delete(evlist); evlist = NULL; } return evlist; }

Contributors

PersonTokensPropCommitsCommitProp
jiri olsajiri olsa40100.00%1100.00%
Total40100.00%1100.00%


struct perf_evlist *perf_evlist__new_dummy(void) { struct perf_evlist *evlist = perf_evlist__new(); if (evlist && perf_evlist__add_dummy(evlist)) { perf_evlist__delete(evlist); evlist = NULL; } return evlist; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo40100.00%1100.00%
Total40100.00%1100.00%

/** * perf_evlist__set_id_pos - set the positions of event ids. * @evlist: selected event list * * Events with compatible sample types all have the same id_pos * and is_pos. For convenience, put a copy on evlist. */
void perf_evlist__set_id_pos(struct perf_evlist *evlist) { struct perf_evsel *first = perf_evlist__first(evlist); evlist->id_pos = first->id_pos; evlist->is_pos = first->is_pos; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter36100.00%1100.00%
Total36100.00%1100.00%


static void perf_evlist__update_id_pos(struct perf_evlist *evlist) { struct perf_evsel *evsel; evlist__for_each_entry(evlist, evsel) perf_evsel__calc_id_pos(evsel); perf_evlist__set_id_pos(evlist); }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter2990.62%133.33%
arnaldo carvalho de meloarnaldo carvalho de melo39.38%266.67%
Total32100.00%3100.00%


static void perf_evlist__purge(struct perf_evlist *evlist) { struct perf_evsel *pos, *n; evlist__for_each_entry_safe(evlist, n, pos) { list_del_init(&pos->node); pos->evlist = NULL; perf_evsel__delete(pos); } evlist->nr_entries = 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo54100.00%4100.00%
Total54100.00%4100.00%


void perf_evlist__exit(struct perf_evlist *evlist) { zfree(&evlist->mmap); zfree(&evlist->backward_mmap); fdarray__exit(&evlist->pollfd); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo2676.47%685.71%
wang nanwang nan823.53%114.29%
Total34100.00%7100.00%


void perf_evlist__delete(struct perf_evlist *evlist) { if (evlist == NULL) return; perf_evlist__munmap(evlist); perf_evlist__close(evlist); cpu_map__put(evlist->cpus); thread_map__put(evlist->threads); evlist->cpus = NULL; evlist->threads = NULL; perf_evlist__purge(evlist); perf_evlist__exit(evlist); free(evlist); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo6697.06%777.78%
jiri olsajiri olsa22.94%222.22%
Total68100.00%9100.00%


static void __perf_evlist__propagate_maps(struct perf_evlist *evlist, struct perf_evsel *evsel) { /* * We already have cpus for evsel (via PMU sysfs) so * keep it, if there's no target cpu list defined. */ if (!evsel->own_cpus || evlist->has_user_cpus) { cpu_map__put(evsel->cpus); evsel->cpus = cpu_map__get(evlist->cpus); } else if (evsel->cpus != evsel->own_cpus) { cpu_map__put(evsel->cpus); evsel->cpus = cpu_map__get(evsel->own_cpus); } thread_map__put(evsel->threads); evsel->threads = thread_map__get(evlist->threads); }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter97100.00%1100.00%
Total97100.00%1100.00%


static void perf_evlist__propagate_maps(struct perf_evlist *evlist) { struct perf_evsel *evsel; evlist__for_each_entry(evlist, evsel) __perf_evlist__propagate_maps(evlist, evsel); }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter2896.55%150.00%
arnaldo carvalho de meloarnaldo carvalho de melo13.45%150.00%
Total29100.00%2100.00%


void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry) { entry->evlist = evlist; list_add_tail(&entry->node, &evlist->entries); entry->idx = evlist->nr_entries; entry->tracking = !entry->idx; if (!evlist->nr_entries++) perf_evlist__set_id_pos(evlist); __perf_evlist__propagate_maps(evlist, entry); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo4664.79%350.00%
adrian hunteradrian hunter2535.21%350.00%
Total71100.00%6100.00%


void perf_evlist__remove(struct perf_evlist *evlist, struct perf_evsel *evsel) { evsel->evlist = NULL; list_del_init(&evsel->node); evlist->nr_entries -= 1; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter35100.00%1100.00%
Total35100.00%1100.00%


void perf_evlist__splice_list_tail(struct perf_evlist *evlist, struct list_head *list) { struct perf_evsel *evsel, *temp; __evlist__for_each_entry_safe(list, temp, evsel) { list_del_init(&evsel->node); perf_evlist__add(evlist, evsel); } }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter2552.08%250.00%
arnaldo carvalho de meloarnaldo carvalho de melo2347.92%250.00%
Total48100.00%4100.00%


void __perf_evlist__set_leader(struct list_head *list) { struct perf_evsel *evsel, *leader; leader = list_entry(list->next, struct perf_evsel, node); evsel = list_entry(list->prev, struct perf_evsel, node); leader->nr_members = evsel->idx - leader->idx + 1; __evlist__for_each_entry(list, evsel) { evsel->leader = leader; } }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo4560.81%360.00%
namhyung kimnamhyung kim2837.84%120.00%
jiri olsajiri olsa11.35%120.00%
Total74100.00%5100.00%


void perf_evlist__set_leader(struct perf_evlist *evlist) { if (evlist->nr_entries) { evlist->nr_groups = evlist->nr_entries > 1 ? 1 : 0; __perf_evlist__set_leader(&evlist->entries); } }

Contributors

PersonTokensPropCommitsCommitProp
jiri olsajiri olsa2152.50%133.33%
namhyung kimnamhyung kim1640.00%133.33%
arnaldo carvalho de meloarnaldo carvalho de melo37.50%133.33%
Total40100.00%3100.00%


void perf_event_attr__set_max_precise_ip(struct perf_event_attr *attr) { attr->precise_ip = 3; while (attr->precise_ip != 0) { int fd = sys_perf_event_open(attr, 0, -1, -1, 0); if (fd != -1) { close(fd); break; } --attr->precise_ip; } }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo64100.00%1100.00%
Total64100.00%1100.00%


int perf_evlist__add_default(struct perf_evlist *evlist) { struct perf_evsel *evsel = perf_evsel__new_cycles(); if (evsel == NULL) return -ENOMEM; perf_evlist__add(evlist, evsel); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo3797.37%266.67%
joerg roedeljoerg roedel12.63%133.33%
Total38100.00%3100.00%


int perf_evlist__add_dummy(struct perf_evlist *evlist) { struct perf_event_attr attr = { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_DUMMY, .size = sizeof(attr), /* to capture ABI version */ }; struct perf_evsel *evsel = perf_evsel__new(&attr); if (evsel == NULL) return -ENOMEM; perf_evlist__add(evlist, evsel); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo67100.00%1100.00%
Total67100.00%1100.00%


static int perf_evlist__add_attrs(struct perf_evlist *evlist, struct perf_event_attr *attrs, size_t nr_attrs) { struct perf_evsel *evsel, *n; LIST_HEAD(head); size_t i; for (i = 0; i < nr_attrs; i++) { evsel = perf_evsel__new_idx(attrs + i, evlist->nr_entries + i); if (evsel == NULL) goto out_delete_partial_list; list_add_tail(&evsel->node, &head); } perf_evlist__splice_list_tail(evlist, &head); return 0; out_delete_partial_list: __evlist__for_each_entry_safe(&head, n, evsel) perf_evsel__delete(evsel); return -1; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo115100.00%5100.00%
Total115100.00%5100.00%


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); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo51100.00%1100.00%
Total51100.00%1100.00%


struct perf_evsel * perf_evlist__find_tracepoint_by_id(struct perf_evlist *evlist, int id) { struct perf_evsel *evsel; evlist__for_each_entry(evlist, evsel) { if (evsel->attr.type == PERF_TYPE_TRACEPOINT && (int)evsel->attr.config == id) return evsel; } return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo5090.91%375.00%
david aherndavid ahern59.09%125.00%
Total55100.00%4100.00%


struct perf_evsel * perf_evlist__find_tracepoint_by_name(struct perf_evlist *evlist, const char *name) { struct perf_evsel *evsel; evlist__for_each_entry(evlist, evsel) { if ((evsel->attr.type == PERF_TYPE_TRACEPOINT) && (strcmp(evsel->name, name) == 0)) return evsel; } return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
david aherndavid ahern5386.89%125.00%
arnaldo carvalho de meloarnaldo carvalho de melo813.11%375.00%
Total61100.00%4100.00%


int perf_evlist__add_newtp(struct perf_evlist *evlist, const char *sys, const char *name, void *handler) { struct perf_evsel *evsel = perf_evsel__newtp(sys, name); if (IS_ERR(evsel)) return -1; evsel->handler = handler; perf_evlist__add(evlist, evsel); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo6095.24%266.67%
jiri olsajiri olsa34.76%133.33%
Total63100.00%3100.00%


static int perf_evlist__nr_threads(struct perf_evlist *evlist, struct perf_evsel *evsel) { if (evsel->system_wide) return 1; else return thread_map__nr(evlist->threads); }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter34100.00%1100.00%
Total34100.00%1100.00%


void perf_evlist__disable(struct perf_evlist *evlist) { struct perf_evsel *pos; evlist__for_each_entry(evlist, pos) { if (!perf_evsel__is_group_leader(pos) || !pos->fd) continue; perf_evsel__disable(pos); } evlist->enabled = false; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo3572.92%555.56%
jiri olsajiri olsa612.50%222.22%
adrian hunteradrian hunter510.42%111.11%
namhyung kimnamhyung kim24.17%111.11%
Total48100.00%9100.00%


void perf_evlist__enable(struct perf_evlist *evlist) { struct perf_evsel *pos; evlist__for_each_entry(evlist, pos) { if (!perf_evsel__is_group_leader(pos) || !pos->fd) continue; perf_evsel__enable(pos); } evlist->enabled = true; }

Contributors

PersonTokensPropCommitsCommitProp
david aherndavid ahern2347.92%111.11%
arnaldo carvalho de meloarnaldo carvalho de melo1225.00%444.44%
jiri olsajiri olsa612.50%222.22%
adrian hunteradrian hunter510.42%111.11%
namhyung kimnamhyung kim24.17%111.11%
Total48100.00%9100.00%


void perf_evlist__toggle_enable(struct perf_evlist *evlist) { (evlist->enabled ? perf_evlist__disable : perf_evlist__enable)(evlist); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo2295.65%150.00%
david aherndavid ahern14.35%150.00%
Total23100.00%2100.00%


static int perf_evlist__enable_event_cpu(struct perf_evlist *evlist, struct perf_evsel *evsel, int cpu) { int thread; int nr_threads = perf_evlist__nr_threads(evlist, evsel); if (!evsel->fd) return -EINVAL; for (thread = 0; thread < nr_threads; thread++) { int err = ioctl(FD(evsel, cpu, thread), PERF_EVENT_IOC_ENABLE, 0); if (err) return err; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter8496.55%150.00%
arnaldo carvalho de meloarnaldo carvalho de melo33.45%150.00%
Total87100.00%2100.00%


static int perf_evlist__enable_event_thread(struct perf_evlist *evlist, struct perf_evsel *evsel, int thread) { int cpu; int nr_cpus = cpu_map__nr(evlist->cpus); if (!evsel->fd) return -EINVAL; for (cpu = 0; cpu < nr_cpus; cpu++) { int err = ioctl(FD(evsel, cpu, thread), PERF_EVENT_IOC_ENABLE, 0); if (err) return err; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter8496.55%150.00%
arnaldo carvalho de meloarnaldo carvalho de melo33.45%150.00%
Total87100.00%2100.00%


int perf_evlist__enable_event_idx(struct perf_evlist *evlist, struct perf_evsel *evsel, int idx) { bool per_cpu_mmaps = !cpu_map__empty(evlist->cpus); if (per_cpu_mmaps) return perf_evlist__enable_event_cpu(evlist, evsel, idx); else return perf_evlist__enable_event_thread(evlist, evsel, idx); }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter54100.00%1100.00%
Total54100.00%1100.00%


int perf_evlist__alloc_pollfd(struct perf_evlist *evlist) { int nr_cpus = cpu_map__nr(evlist->cpus); int nr_threads = thread_map__nr(evlist->threads); int nfds = 0; struct perf_evsel *evsel; evlist__for_each_entry(evlist, evsel) { if (evsel->system_wide) nfds += nr_cpus; else nfds += nr_cpus * nr_threads; } if (fdarray__available_entries(&evlist->pollfd) < nfds && fdarray__grow(&evlist->pollfd, nfds) < 0) return -ENOMEM; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo5557.29%777.78%
adrian hunteradrian hunter2627.08%111.11%
namhyung kimnamhyung kim1515.62%111.11%
Total96100.00%9100.00%


static int __perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd, struct perf_mmap *map, short revent) { int pos = fdarray__add(&evlist->pollfd, fd, revent | POLLERR | POLLHUP); /* * Save the idx so that when we filter out fds POLLHUP'ed we can * close the associated evlist->mmap[] entry. */ if (pos >= 0) { evlist->pollfd.priv[pos].ptr = map; fcntl(fd, F_SETFL, O_NONBLOCK); } return pos; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo6586.67%466.67%
wang nanwang nan1013.33%233.33%
Total75100.00%6100.00%


int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd) { return __perf_evlist__add_pollfd(evlist, fd, NULL, POLLIN); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo2288.00%466.67%
wang nanwang nan312.00%233.33%
Total25100.00%6100.00%


static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd, void *arg __maybe_unused) { struct perf_mmap *map = fda->priv[fd].ptr; if (map) perf_mmap__put(map); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo2661.90%133.33%
wang nanwang nan1638.10%266.67%
Total42100.00%3100.00%


int perf_evlist__filter_pollfd(struct perf_evlist *evlist, short revents_and_mask) { return fdarray__filter(&evlist->pollfd, revents_and_mask, perf_evlist__munmap_filtered, NULL); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo2692.86%480.00%
wang nanwang nan27.14%120.00%
Total28100.00%5100.00%


int perf_evlist__poll(struct perf_evlist *evlist, int timeout) { return fdarray__poll(&evlist->pollfd, timeout); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo24100.00%2100.00%
Total24100.00%2100.00%


static void perf_evlist__id_hash(struct perf_evlist *evlist, struct perf_evsel *evsel, int cpu, int thread, u64 id) { int hash; struct perf_sample_id *sid = SID(evsel, cpu, thread); sid->id = id; sid->evsel = evsel; hash = hash_64(sid->id, PERF_EVLIST__HLIST_BITS); hlist_add_head(&sid->node, &evlist->heads[hash]); }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo81100.00%3100.00%
Total81100.00%3100.00%


void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel, int cpu, int thread, u64 id) { perf_evlist__id_hash(evlist, evsel, cpu, thread, id); evsel->id[evsel->ids++] = id; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo49100.00%1100.00%
Total49100.00%1100.00%


int perf_evlist__id_add_fd(struct perf_evlist *evlist, struct perf_evsel *evsel, int cpu, int thread, int fd) { u64 read_data[4] = { 0, }; int id_idx = 1; /* The first entry is the counter value */ u64 id; int ret; ret = ioctl(fd, PERF_EVENT_IOC_ID, &id); if (!ret) goto add; if (errno != ENOTTY) return -1; /* Legacy way to get event id.. All hail to old kernels! */ /* * This way does not work with group format read, so bail * out in that case. */ if (perf_evlist__read_format(evlist) & PERF_FORMAT_GROUP) return -1; if (!(evsel->attr.read_format & PERF_FORMAT_ID) || read(fd, &read_data, sizeof(read_data)) == -1) return -1; if (evsel->attr.read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) ++id_idx; if (evsel->attr.read_format & PERF_FORMAT_TOTAL_TIME_RUNNING) ++id_idx; id = read_data[id_idx]; add: perf_evlist__id_add(evlist, evsel, cpu, thread, id); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo11465.14%360.00%
jiri olsajiri olsa6134.86%240.00%
Total175100.00%5100.00%


static void perf_evlist__set_sid_idx(struct perf_evlist *evlist, struct perf_evsel *evsel, int idx, int cpu, int thread) { struct perf_sample_id *sid = SID(evsel, cpu, thread); sid->idx = idx; if (evlist->cpus && cpu >= 0) sid->cpu = evlist->cpus->map[cpu]; else sid->cpu = -1; if (!evsel->system_wide && evlist->threads && thread >= 0) sid->tid = thread_map__pid(evlist->threads, thread); else sid->tid = -1; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter10896.43%150.00%
jiri olsajiri olsa43.57%150.00%
Total112100.00%2100.00%


struct perf_sample_id *perf_evlist__id2sid(struct perf_evlist *evlist, u64 id) { struct hlist_head *head; struct perf_sample_id *sid; int hash; hash = hash_64(id, PERF_EVLIST__HLIST_BITS); head = &evlist->heads[hash]; hlist_for_each_entry(sid, head, node) if (sid->id == id) return sid; return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
arnaldo carvalho de meloarnaldo carvalho de melo6289.86%150.00%
jiri olsajiri olsa710.14%150.00%
Total69100.00%2100.00%


struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id) { struct perf_sample_id *sid; if (evlist->nr_entries == 1 || !id) return perf_evlist__first(evlist); sid = perf_evlist__id2sid(evlist, id); if (sid) return sid->evsel; if (!perf_evlist__sample_id_all(evlist)) return perf_evlist__first(evlist); return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
jiri olsajiri olsa4866.67%120.00%
namhyung kimnamhyung kim1318.06%120.00%
arnaldo carvalho de meloarnaldo carvalho de melo811.11%240.00%
adrian hunteradrian hunter34.17%120.00%
Total72100.00%5100.00%


struct perf_evsel *perf_evlist__id2evsel_strict(struct perf_evlist *evlist, u64 id) { struct perf_sample_id *sid; if (!id) return NULL; sid = perf_evlist__id2sid(evlist, id); if (sid) return sid->evsel; return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
adrian hunteradrian hunter49100.00%1100.00%
Total49100.00%1100.00%


static int perf_evlist__event2id(struct perf_evlist *evlist, union perf_event *event, u64 *id) { const u64 *array = event->sample.array; ssize_t n; n = (event->header.size - sizeof(event->header)) >> 3; if (event->header.type == PERF_RECORD_SAMPLE) { if (evlist->id_pos >=