diff options
Diffstat (limited to 'tools/perf/builtin-kmem.c')
| -rw-r--r-- | tools/perf/builtin-kmem.c | 37 | 
1 files changed, 25 insertions, 12 deletions
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 547af48deb4..ce35015f2dc 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -57,6 +57,11 @@ static unsigned long nr_allocs, nr_cross_allocs;  #define PATH_SYS_NODE	"/sys/devices/system/node" +struct perf_kmem { +	struct perf_tool    tool; +	struct perf_session *session; +}; +  static void init_cpunode_map(void)  {  	FILE *fp; @@ -278,14 +283,16 @@ static void process_free_event(void *data,  	s_alloc->alloc_cpu = -1;  } -static void process_raw_event(union perf_event *raw_event __used, void *data, +static void process_raw_event(struct perf_tool *tool, +			      union perf_event *raw_event __used, void *data,  			      int cpu, u64 timestamp, struct thread *thread)  { +	struct perf_kmem *kmem = container_of(tool, struct perf_kmem, tool);  	struct event_format *event;  	int type; -	type = trace_parse_common_type(data); -	event = trace_find_event(type); +	type = trace_parse_common_type(kmem->session->pevent, data); +	event = pevent_find_event(kmem->session->pevent, type);  	if (!strcmp(event->name, "kmalloc") ||  	    !strcmp(event->name, "kmem_cache_alloc")) { @@ -306,7 +313,7 @@ static void process_raw_event(union perf_event *raw_event __used, void *data,  	}  } -static int process_sample_event(struct perf_tool *tool __used, +static int process_sample_event(struct perf_tool *tool,  				union perf_event *event,  				struct perf_sample *sample,  				struct perf_evsel *evsel __used, @@ -322,16 +329,18 @@ static int process_sample_event(struct perf_tool *tool __used,  	dump_printf(" ... thread: %s:%d\n", thread->comm, thread->pid); -	process_raw_event(event, sample->raw_data, sample->cpu, +	process_raw_event(tool, event, sample->raw_data, sample->cpu,  			  sample->time, thread);  	return 0;  } -static struct perf_tool perf_kmem = { -	.sample			= process_sample_event, -	.comm			= perf_event__process_comm, -	.ordered_samples	= true, +static struct perf_kmem perf_kmem = { +	.tool = { +		.sample			= process_sample_event, +		.comm			= perf_event__process_comm, +		.ordered_samples	= true, +	},  };  static double fragmentation(unsigned long n_req, unsigned long n_alloc) @@ -486,11 +495,15 @@ static void sort_result(void)  static int __cmd_kmem(void)  {  	int err = -EINVAL; -	struct perf_session *session = perf_session__new(input_name, O_RDONLY, -							 0, false, &perf_kmem); +	struct perf_session *session; + +	session = perf_session__new(input_name, O_RDONLY, 0, false, +				    &perf_kmem.tool);  	if (session == NULL)  		return -ENOMEM; +	perf_kmem.session = session; +  	if (perf_session__create_kernel_maps(session) < 0)  		goto out_delete; @@ -498,7 +511,7 @@ static int __cmd_kmem(void)  		goto out_delete;  	setup_pager(); -	err = perf_session__process_events(session, &perf_kmem); +	err = perf_session__process_events(session, &perf_kmem.tool);  	if (err != 0)  		goto out_delete;  	sort_result();  |