diff options
Diffstat (limited to 'kernel/events/core.c')
| -rw-r--r-- | kernel/events/core.c | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/kernel/events/core.c b/kernel/events/core.c index dce6e13cf9d..3820e3cefba 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -37,6 +37,7 @@  #include <linux/ftrace_event.h>  #include <linux/hw_breakpoint.h>  #include <linux/mm_types.h> +#include <linux/cgroup.h>  #include "internal.h" @@ -234,6 +235,20 @@ static void perf_ctx_unlock(struct perf_cpu_context *cpuctx,  #ifdef CONFIG_CGROUP_PERF  /* + * perf_cgroup_info keeps track of time_enabled for a cgroup. + * This is a per-cpu dynamically allocated data structure. + */ +struct perf_cgroup_info { +	u64				time; +	u64				timestamp; +}; + +struct perf_cgroup { +	struct cgroup_subsys_state	css; +	struct perf_cgroup_info	__percpu *info; +}; + +/*   * Must ensure cgroup is pinned (css_get) before calling   * this function. In other words, we cannot call this function   * if there is no cgroup event for the current CPU context. @@ -976,9 +991,15 @@ static void perf_event__header_size(struct perf_event *event)  	if (sample_type & PERF_SAMPLE_PERIOD)  		size += sizeof(data->period); +	if (sample_type & PERF_SAMPLE_WEIGHT) +		size += sizeof(data->weight); +  	if (sample_type & PERF_SAMPLE_READ)  		size += event->read_size; +	if (sample_type & PERF_SAMPLE_DATA_SRC) +		size += sizeof(data->data_src.val); +  	event->header_size = size;  } @@ -4193,6 +4214,12 @@ void perf_output_sample(struct perf_output_handle *handle,  		perf_output_sample_ustack(handle,  					  data->stack_user_size,  					  data->regs_user.regs); + +	if (sample_type & PERF_SAMPLE_WEIGHT) +		perf_output_put(handle, data->weight); + +	if (sample_type & PERF_SAMPLE_DATA_SRC) +		perf_output_put(handle, data->data_src.val);  }  void perf_prepare_sample(struct perf_event_header *header, @@ -4782,6 +4809,9 @@ got_name:  	mmap_event->file_name = name;  	mmap_event->file_size = size; +	if (!(vma->vm_flags & VM_EXEC)) +		mmap_event->event_id.header.misc |= PERF_RECORD_MISC_MMAP_DATA; +  	mmap_event->event_id.header.size = sizeof(mmap_event->event_id) + size;  	rcu_read_lock(); |