diff options
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-perl.c')
| -rw-r--r-- | tools/perf/util/scripting-engines/trace-event-perl.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c index 039d0365ad41..603091317bed 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -67,8 +67,6 @@ INTERP my_perl;  #define TRACE_EVENT_TYPE_MAX				\  	((1 << (sizeof(unsigned short) * 8)) - 1) -static DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); -  extern struct scripting_context *scripting_context;  static char *cur_field_name; @@ -262,6 +260,7 @@ static SV *perl_process_callchain(struct perf_sample *sample,  				  struct evsel *evsel,  				  struct addr_location *al)  { +	struct callchain_cursor *cursor;  	AV *list;  	list = newAV(); @@ -271,18 +270,20 @@ static SV *perl_process_callchain(struct perf_sample *sample,  	if (!symbol_conf.use_callchain || !sample->callchain)  		goto exit; -	if (thread__resolve_callchain(al->thread, &callchain_cursor, evsel, +	cursor = get_tls_callchain_cursor(); + +	if (thread__resolve_callchain(al->thread, cursor, evsel,  				      sample, NULL, NULL, scripting_max_stack) != 0) {  		pr_err("Failed to resolve callchain. Skipping\n");  		goto exit;  	} -	callchain_cursor_commit(&callchain_cursor); +	callchain_cursor_commit(cursor);  	while (1) {  		HV *elem;  		struct callchain_cursor_node *node; -		node = callchain_cursor_current(&callchain_cursor); +		node = callchain_cursor_current(cursor);  		if (!node)  			break; @@ -330,7 +331,7 @@ static SV *perl_process_callchain(struct perf_sample *sample,  			}  		} -		callchain_cursor_advance(&callchain_cursor); +		callchain_cursor_advance(cursor);  		av_push(list, newRV_noinc((SV*)elem));  	} @@ -353,7 +354,9 @@ static void perl_process_tracepoint(struct perf_sample *sample,  	void *data = sample->raw_data;  	unsigned long long nsecs = sample->time;  	const char *comm = thread__comm_str(thread); +	DECLARE_BITMAP(events_defined, TRACE_EVENT_TYPE_MAX); +	bitmap_zero(events_defined, TRACE_EVENT_TYPE_MAX);  	dSP;  	if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) | 
