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>
This commit is contained in:
		
					parent
					
						
							
								d53e57d039
							
						
					
				
			
			
				commit
				
					
						ef503831d8
					
				
			
		
					 12 changed files with 37 additions and 28 deletions
				
			
		| 
						 | 
					@ -149,10 +149,9 @@ static void perf_evsel__delete_priv(struct perf_evsel *evsel)
 | 
				
			||||||
	perf_evsel__delete(evsel);
 | 
						perf_evsel__delete(evsel);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction,
 | 
					static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction, void *handler)
 | 
				
			||||||
						    void *handler, int idx)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction, idx);
 | 
						struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (evsel) {
 | 
						if (evsel) {
 | 
				
			||||||
		evsel->priv = malloc(sizeof(struct syscall_tp));
 | 
							evsel->priv = malloc(sizeof(struct syscall_tp));
 | 
				
			||||||
| 
						 | 
					@ -186,17 +185,16 @@ static int perf_evlist__add_syscall_newtp(struct perf_evlist *evlist,
 | 
				
			||||||
					  void *sys_exit_handler)
 | 
										  void *sys_exit_handler)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = -1;
 | 
						int ret = -1;
 | 
				
			||||||
	int idx = evlist->nr_entries;
 | 
					 | 
				
			||||||
	struct perf_evsel *sys_enter, *sys_exit;
 | 
						struct perf_evsel *sys_enter, *sys_exit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler, idx++);
 | 
						sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler);
 | 
				
			||||||
	if (sys_enter == NULL)
 | 
						if (sys_enter == NULL)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_evsel__init_sc_tp_ptr_field(sys_enter, args))
 | 
						if (perf_evsel__init_sc_tp_ptr_field(sys_enter, args))
 | 
				
			||||||
		goto out_delete_sys_enter;
 | 
							goto out_delete_sys_enter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler, idx++);
 | 
						sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler);
 | 
				
			||||||
	if (sys_exit == NULL)
 | 
						if (sys_exit == NULL)
 | 
				
			||||||
		goto out_delete_sys_enter;
 | 
							goto out_delete_sys_enter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1824,8 +1822,7 @@ static size_t trace__fprintf_thread_summary(struct trace *trace, FILE *fp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void perf_evlist__add_vfs_getname(struct perf_evlist *evlist)
 | 
					static void perf_evlist__add_vfs_getname(struct perf_evlist *evlist)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname",
 | 
						struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname");
 | 
				
			||||||
						     evlist->nr_entries);
 | 
					 | 
				
			||||||
	if (evsel == NULL)
 | 
						if (evsel == NULL)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int test__perf_evsel__tp_sched_test(void)
 | 
					int test__perf_evsel__tp_sched_test(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch", 0);
 | 
						struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch");
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ int test__perf_evsel__tp_sched_test(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	perf_evsel__delete(evsel);
 | 
						perf_evsel__delete(evsel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp("sched", "sched_wakeup", 0);
 | 
						evsel = perf_evsel__newtp("sched", "sched_wakeup");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_evsel__test_field(evsel, "comm", 16, true))
 | 
						if (perf_evsel__test_field(evsel, "comm", 16, true))
 | 
				
			||||||
		ret = -1;
 | 
							ret = -1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,7 @@ int test__basic_mmap(void)
 | 
				
			||||||
		char name[64];
 | 
							char name[64];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		snprintf(name, sizeof(name), "sys_enter_%s", syscall_names[i]);
 | 
							snprintf(name, sizeof(name), "sys_enter_%s", syscall_names[i]);
 | 
				
			||||||
		evsels[i] = perf_evsel__newtp("syscalls", name, i);
 | 
							evsels[i] = perf_evsel__newtp("syscalls", name);
 | 
				
			||||||
		if (evsels[i] == NULL) {
 | 
							if (evsels[i] == NULL) {
 | 
				
			||||||
			pr_debug("perf_evsel__new\n");
 | 
								pr_debug("perf_evsel__new\n");
 | 
				
			||||||
			goto out_free_evlist;
 | 
								goto out_free_evlist;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,7 @@ int test__open_syscall_event_on_all_cpus(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CPU_ZERO(&cpu_set);
 | 
						CPU_ZERO(&cpu_set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
 | 
						evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
		pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
 | 
							pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
 | 
				
			||||||
		goto out_thread_map_delete;
 | 
							goto out_thread_map_delete;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ int test__syscall_open_tp_fields(void)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
 | 
						evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
		pr_debug("%s: perf_evsel__newtp\n", __func__);
 | 
							pr_debug("%s: perf_evsel__newtp\n", __func__);
 | 
				
			||||||
		goto out_delete_evlist;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ int test__open_syscall_event(void)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
 | 
						evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
		pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
 | 
							pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
 | 
				
			||||||
		goto out_thread_map_delete;
 | 
							goto out_thread_map_delete;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__new(&attr, 0);
 | 
						evsel = perf_evsel__new(&attr);
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
		pr_debug("perf_evsel__new\n");
 | 
							pr_debug("perf_evsel__new\n");
 | 
				
			||||||
		goto out_free_evlist;
 | 
							goto out_free_evlist;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -117,6 +117,8 @@ void perf_evlist__delete(struct perf_evlist *evlist)
 | 
				
			||||||
void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 | 
					void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	list_add_tail(&entry->node, &evlist->entries);
 | 
						list_add_tail(&entry->node, &evlist->entries);
 | 
				
			||||||
 | 
						entry->idx = evlist->nr_entries;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!evlist->nr_entries++)
 | 
						if (!evlist->nr_entries++)
 | 
				
			||||||
		perf_evlist__set_id_pos(evlist);
 | 
							perf_evlist__set_id_pos(evlist);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -165,7 +167,7 @@ int perf_evlist__add_default(struct perf_evlist *evlist)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	event_attr_init(&attr);
 | 
						event_attr_init(&attr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__new(&attr, 0);
 | 
						evsel = perf_evsel__new(&attr);
 | 
				
			||||||
	if (evsel == NULL)
 | 
						if (evsel == NULL)
 | 
				
			||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -190,7 +192,7 @@ static int perf_evlist__add_attrs(struct perf_evlist *evlist,
 | 
				
			||||||
	size_t i;
 | 
						size_t i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < nr_attrs; i++) {
 | 
						for (i = 0; i < nr_attrs; i++) {
 | 
				
			||||||
		evsel = perf_evsel__new(attrs + i, evlist->nr_entries + i);
 | 
							evsel = perf_evsel__new_idx(attrs + i, evlist->nr_entries + i);
 | 
				
			||||||
		if (evsel == NULL)
 | 
							if (evsel == NULL)
 | 
				
			||||||
			goto out_delete_partial_list;
 | 
								goto out_delete_partial_list;
 | 
				
			||||||
		list_add_tail(&evsel->node, &head);
 | 
							list_add_tail(&evsel->node, &head);
 | 
				
			||||||
| 
						 | 
					@ -249,9 +251,8 @@ perf_evlist__find_tracepoint_by_name(struct perf_evlist *evlist,
 | 
				
			||||||
int perf_evlist__add_newtp(struct perf_evlist *evlist,
 | 
					int perf_evlist__add_newtp(struct perf_evlist *evlist,
 | 
				
			||||||
			   const char *sys, const char *name, void *handler)
 | 
								   const char *sys, const char *name, void *handler)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel;
 | 
						struct perf_evsel *evsel = perf_evsel__newtp(sys, name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp(sys, name, evlist->nr_entries);
 | 
					 | 
				
			||||||
	if (evsel == NULL)
 | 
						if (evsel == NULL)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -168,7 +168,7 @@ void perf_evsel__init(struct perf_evsel *evsel,
 | 
				
			||||||
	perf_evsel__calc_id_pos(evsel);
 | 
						perf_evsel__calc_id_pos(evsel);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx)
 | 
					struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel = zalloc(sizeof(*evsel));
 | 
						struct perf_evsel *evsel = zalloc(sizeof(*evsel));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ out:
 | 
				
			||||||
	return format;
 | 
						return format;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx)
 | 
					struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel = zalloc(sizeof(*evsel));
 | 
						struct perf_evsel *evsel = zalloc(sizeof(*evsel));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,8 +96,19 @@ struct thread_map;
 | 
				
			||||||
struct perf_evlist;
 | 
					struct perf_evlist;
 | 
				
			||||||
struct perf_record_opts;
 | 
					struct perf_record_opts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx);
 | 
					struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx);
 | 
				
			||||||
struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx);
 | 
					
 | 
				
			||||||
 | 
					static inline struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return perf_evsel__new_idx(attr, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return perf_evsel__newtp_idx(sys, name, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct event_format *event_format__new(const char *sys, const char *name);
 | 
					struct event_format *event_format__new(const char *sys, const char *name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2797,7 +2797,7 @@ int perf_session__read_header(struct perf_session *session)
 | 
				
			||||||
			perf_event__attr_swap(&f_attr.attr);
 | 
								perf_event__attr_swap(&f_attr.attr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tmp = lseek(fd, 0, SEEK_CUR);
 | 
							tmp = lseek(fd, 0, SEEK_CUR);
 | 
				
			||||||
		evsel = perf_evsel__new(&f_attr.attr, i);
 | 
							evsel = perf_evsel__new(&f_attr.attr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (evsel == NULL)
 | 
							if (evsel == NULL)
 | 
				
			||||||
			goto out_delete_evlist;
 | 
								goto out_delete_evlist;
 | 
				
			||||||
| 
						 | 
					@ -2916,7 +2916,7 @@ int perf_event__process_attr(struct perf_tool *tool __maybe_unused,
 | 
				
			||||||
			return -ENOMEM;
 | 
								return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__new(&event->attr.attr, evlist->nr_entries);
 | 
						evsel = perf_evsel__new(&event->attr.attr);
 | 
				
			||||||
	if (evsel == NULL)
 | 
						if (evsel == NULL)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -277,7 +277,7 @@ static int __add_event(struct list_head *list, int *idx,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	event_attr_init(attr);
 | 
						event_attr_init(attr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__new(attr, (*idx)++);
 | 
						evsel = perf_evsel__new_idx(attr, (*idx)++);
 | 
				
			||||||
	if (!evsel)
 | 
						if (!evsel)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -378,7 +378,7 @@ static int add_tracepoint(struct list_head *list, int *idx,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel;
 | 
						struct perf_evsel *evsel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__newtp(sys_name, evt_name, (*idx)++);
 | 
						evsel = perf_evsel__newtp_idx(sys_name, evt_name, (*idx)++);
 | 
				
			||||||
	if (!evsel)
 | 
						if (!evsel)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1097,7 +1097,7 @@ static bool is_event_supported(u8 type, unsigned config)
 | 
				
			||||||
		.threads = { 0 },
 | 
							.threads = { 0 },
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evsel__new(&attr, 0);
 | 
						evsel = perf_evsel__new(&attr);
 | 
				
			||||||
	if (evsel) {
 | 
						if (evsel) {
 | 
				
			||||||
		ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
 | 
							ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
 | 
				
			||||||
		perf_evsel__delete(evsel);
 | 
							perf_evsel__delete(evsel);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue