Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf evsel: Remove idx parm from constructor

Most uses of the evsel constructor are followed by a call to
perf_evlist__add with an idex of evlist->nr_entries, so make rename
the current constructor to perf_evsel__new_idx and remove the need
for passing the constructor for the common case.

We still need the new_idx variant because the way groups are handled,
with evsel->nr_members holding the number of entries in an evlist,
partitioning the evlist into sublists inside a single linked list.

This asks for a clarifying refactoring, but for now simplify the non
parser cases, so that tool writers don't have to bother with evsel idx
setting.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-zy9tskx6jqm2rmw7468zze2a@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+37 -28
+5 -8
tools/perf/builtin-trace.c
··· 149 149 perf_evsel__delete(evsel); 150 150 } 151 151 152 - static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction, 153 - void *handler, int idx) 152 + static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction, void *handler) 154 153 { 155 - struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction, idx); 154 + struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction); 156 155 157 156 if (evsel) { 158 157 evsel->priv = malloc(sizeof(struct syscall_tp)); ··· 185 186 void *sys_exit_handler) 186 187 { 187 188 int ret = -1; 188 - int idx = evlist->nr_entries; 189 189 struct perf_evsel *sys_enter, *sys_exit; 190 190 191 - sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler, idx++); 191 + sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler); 192 192 if (sys_enter == NULL) 193 193 goto out; 194 194 195 195 if (perf_evsel__init_sc_tp_ptr_field(sys_enter, args)) 196 196 goto out_delete_sys_enter; 197 197 198 - sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler, idx++); 198 + sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler); 199 199 if (sys_exit == NULL) 200 200 goto out_delete_sys_enter; 201 201 ··· 1822 1824 1823 1825 static void perf_evlist__add_vfs_getname(struct perf_evlist *evlist) 1824 1826 { 1825 - struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname", 1826 - evlist->nr_entries); 1827 + struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname"); 1827 1828 if (evsel == NULL) 1828 1829 return; 1829 1830
+2 -2
tools/perf/tests/evsel-tp-sched.c
··· 32 32 33 33 int test__perf_evsel__tp_sched_test(void) 34 34 { 35 - struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch", 0); 35 + struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch"); 36 36 int ret = 0; 37 37 38 38 if (evsel == NULL) { ··· 63 63 64 64 perf_evsel__delete(evsel); 65 65 66 - evsel = perf_evsel__newtp("sched", "sched_wakeup", 0); 66 + evsel = perf_evsel__newtp("sched", "sched_wakeup"); 67 67 68 68 if (perf_evsel__test_field(evsel, "comm", 16, true)) 69 69 ret = -1;
+1 -1
tools/perf/tests/mmap-basic.c
··· 65 65 char name[64]; 66 66 67 67 snprintf(name, sizeof(name), "sys_enter_%s", syscall_names[i]); 68 - evsels[i] = perf_evsel__newtp("syscalls", name, i); 68 + evsels[i] = perf_evsel__newtp("syscalls", name); 69 69 if (evsels[i] == NULL) { 70 70 pr_debug("perf_evsel__new\n"); 71 71 goto out_free_evlist;
+1 -1
tools/perf/tests/open-syscall-all-cpus.c
··· 26 26 27 27 CPU_ZERO(&cpu_set); 28 28 29 - evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0); 29 + evsel = perf_evsel__newtp("syscalls", "sys_enter_open"); 30 30 if (evsel == NULL) { 31 31 pr_debug("is debugfs mounted on /sys/kernel/debug?\n"); 32 32 goto out_thread_map_delete;
+1 -1
tools/perf/tests/open-syscall-tp-fields.c
··· 27 27 goto out; 28 28 } 29 29 30 - evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0); 30 + evsel = perf_evsel__newtp("syscalls", "sys_enter_open"); 31 31 if (evsel == NULL) { 32 32 pr_debug("%s: perf_evsel__newtp\n", __func__); 33 33 goto out_delete_evlist;
+1 -1
tools/perf/tests/open-syscall.c
··· 15 15 return -1; 16 16 } 17 17 18 - evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0); 18 + evsel = perf_evsel__newtp("syscalls", "sys_enter_open"); 19 19 if (evsel == NULL) { 20 20 pr_debug("is debugfs mounted on /sys/kernel/debug?\n"); 21 21 goto out_thread_map_delete;
+1 -1
tools/perf/tests/sw-clock.c
··· 42 42 return -1; 43 43 } 44 44 45 - evsel = perf_evsel__new(&attr, 0); 45 + evsel = perf_evsel__new(&attr); 46 46 if (evsel == NULL) { 47 47 pr_debug("perf_evsel__new\n"); 48 48 goto out_free_evlist;
+5 -4
tools/perf/util/evlist.c
··· 117 117 void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry) 118 118 { 119 119 list_add_tail(&entry->node, &evlist->entries); 120 + entry->idx = evlist->nr_entries; 121 + 120 122 if (!evlist->nr_entries++) 121 123 perf_evlist__set_id_pos(evlist); 122 124 } ··· 167 165 168 166 event_attr_init(&attr); 169 167 170 - evsel = perf_evsel__new(&attr, 0); 168 + evsel = perf_evsel__new(&attr); 171 169 if (evsel == NULL) 172 170 goto error; 173 171 ··· 192 190 size_t i; 193 191 194 192 for (i = 0; i < nr_attrs; i++) { 195 - evsel = perf_evsel__new(attrs + i, evlist->nr_entries + i); 193 + evsel = perf_evsel__new_idx(attrs + i, evlist->nr_entries + i); 196 194 if (evsel == NULL) 197 195 goto out_delete_partial_list; 198 196 list_add_tail(&evsel->node, &head); ··· 251 249 int perf_evlist__add_newtp(struct perf_evlist *evlist, 252 250 const char *sys, const char *name, void *handler) 253 251 { 254 - struct perf_evsel *evsel; 252 + struct perf_evsel *evsel = perf_evsel__newtp(sys, name); 255 253 256 - evsel = perf_evsel__newtp(sys, name, evlist->nr_entries); 257 254 if (evsel == NULL) 258 255 return -1; 259 256
+2 -2
tools/perf/util/evsel.c
··· 168 168 perf_evsel__calc_id_pos(evsel); 169 169 } 170 170 171 - struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx) 171 + struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx) 172 172 { 173 173 struct perf_evsel *evsel = zalloc(sizeof(*evsel)); 174 174 ··· 219 219 return format; 220 220 } 221 221 222 - struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx) 222 + struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx) 223 223 { 224 224 struct perf_evsel *evsel = zalloc(sizeof(*evsel)); 225 225
+13 -2
tools/perf/util/evsel.h
··· 96 96 struct perf_evlist; 97 97 struct perf_record_opts; 98 98 99 - struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx); 100 - struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx); 99 + struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx); 100 + 101 + static inline struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr) 102 + { 103 + return perf_evsel__new_idx(attr, 0); 104 + } 105 + 106 + struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx); 107 + 108 + static inline struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name) 109 + { 110 + return perf_evsel__newtp_idx(sys, name, 0); 111 + } 101 112 102 113 struct event_format *event_format__new(const char *sys, const char *name); 103 114
+2 -2
tools/perf/util/header.c
··· 2797 2797 perf_event__attr_swap(&f_attr.attr); 2798 2798 2799 2799 tmp = lseek(fd, 0, SEEK_CUR); 2800 - evsel = perf_evsel__new(&f_attr.attr, i); 2800 + evsel = perf_evsel__new(&f_attr.attr); 2801 2801 2802 2802 if (evsel == NULL) 2803 2803 goto out_delete_evlist; ··· 2916 2916 return -ENOMEM; 2917 2917 } 2918 2918 2919 - evsel = perf_evsel__new(&event->attr.attr, evlist->nr_entries); 2919 + evsel = perf_evsel__new(&event->attr.attr); 2920 2920 if (evsel == NULL) 2921 2921 return -ENOMEM; 2922 2922
+3 -3
tools/perf/util/parse-events.c
··· 277 277 278 278 event_attr_init(attr); 279 279 280 - evsel = perf_evsel__new(attr, (*idx)++); 280 + evsel = perf_evsel__new_idx(attr, (*idx)++); 281 281 if (!evsel) 282 282 return -ENOMEM; 283 283 ··· 378 378 { 379 379 struct perf_evsel *evsel; 380 380 381 - evsel = perf_evsel__newtp(sys_name, evt_name, (*idx)++); 381 + evsel = perf_evsel__newtp_idx(sys_name, evt_name, (*idx)++); 382 382 if (!evsel) 383 383 return -ENOMEM; 384 384 ··· 1097 1097 .threads = { 0 }, 1098 1098 }; 1099 1099 1100 - evsel = perf_evsel__new(&attr, 0); 1100 + evsel = perf_evsel__new(&attr); 1101 1101 if (evsel) { 1102 1102 ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0; 1103 1103 perf_evsel__delete(evsel);