static struct tracepoint_path * get_tracepoints_path(struct perf_event_attr *pattrs, int nb_events) { struct tracepoint_path path, *ppath = &path; int i, nr_tracepoints = 0; for (i = 0; i < nb_events; i++) { if (pattrs[i].type != PERF_TYPE_TRACEPOINT) continue; ++nr_tracepoints; ppath->next = tracepoint_id_to_path(pattrs[i].config); if (!ppath->next) die("%s\n", "No memory to alloc tracepoints list"); ppath = ppath->next; } return nr_tracepoints > 0 ? path.next : NULL; }
static struct tracepoint_path * get_tracepoints_path(struct list_head *pattrs) { struct tracepoint_path path, *ppath = &path; struct perf_evsel *pos; int nr_tracepoints = 0; list_for_each_entry(pos, pattrs, node) { if (pos->attr.type != PERF_TYPE_TRACEPOINT) continue; ++nr_tracepoints; ppath->next = tracepoint_id_to_path(pos->attr.config); if (!ppath->next) die("%s\n", "No memory to alloc tracepoints list"); ppath = ppath->next; } return nr_tracepoints > 0 ? path.next : NULL; }
static struct tracepoint_path * get_tracepoints_path(struct list_head *pattrs) { struct tracepoint_path path, *ppath = &path; struct perf_evsel *pos; int nr_tracepoints = 0; list_for_each_entry(pos, pattrs, node) { if (pos->attr.type != PERF_TYPE_TRACEPOINT) continue; ++nr_tracepoints; if (pos->name) { ppath->next = tracepoint_name_to_path(pos->name); if (ppath->next) goto next; if (strchr(pos->name, ':') == NULL) goto try_id; goto error; } try_id: ppath->next = tracepoint_id_to_path(pos->attr.config); if (!ppath->next) { error: pr_debug("No memory to alloc tracepoints list\n"); put_tracepoints_path(&path); return NULL; } next: ppath = ppath->next; } return nr_tracepoints > 0 ? path.next : NULL; }