diff options
| author | Heinz Graalfs <graalfs@linux.vnet.ibm.com> | 2011-01-21 10:06:54 +0000 | 
|---|---|---|
| committer | Robert Richter <robert.richter@amd.com> | 2011-02-15 11:07:07 +0100 | 
| commit | 54ebbe7ba51d97a28a9a406203d171d61858e4b9 (patch) | |
| tree | 529982f17aa0aba84a310261be0773f68f4337b1 /drivers/oprofile | |
| parent | d14dd7e20d5e526557f5d3cfef4046a642f80924 (diff) | |
| download | linux-54ebbe7ba51d97a28a9a406203d171d61858e4b9.tar.bz2 | |
oprofile: Introduce new oprofile sample add function (oprofile_add_ext_hw_sample)
This patch introduces a new oprofile sample add function
(oprofile_add_ext_hw_sample) that can also take task_struct as an
argument, which is used by the hwsampler kernel module when copying
hardware samples to OProfile buffers.
Applied with following changes:
* removed #include <linux/module.h>
* whitespace changes
* removed conditional compilation (CONFIG_HAVE_HWSAMPLER)
* modified order of functions
* fix missing function definition in header file
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Maran Pakkirisamy <maranp@linux.vnet.ibm.com>
Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/oprofile')
| -rw-r--r-- | drivers/oprofile/cpu_buffer.c | 24 | 
1 files changed, 17 insertions, 7 deletions
| diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c index 59f55441e075..b8ef8ddcc292 100644 --- a/drivers/oprofile/cpu_buffer.c +++ b/drivers/oprofile/cpu_buffer.c @@ -258,8 +258,10 @@ op_add_sample(struct oprofile_cpu_buffer *cpu_buf,   */  static int  log_sample(struct oprofile_cpu_buffer *cpu_buf, unsigned long pc, -	   unsigned long backtrace, int is_kernel, unsigned long event) +	   unsigned long backtrace, int is_kernel, unsigned long event, +	   struct task_struct *task)  { +	struct task_struct *tsk = task ? task : current;  	cpu_buf->sample_received++;  	if (pc == ESCAPE_CODE) { @@ -267,7 +269,7 @@ log_sample(struct oprofile_cpu_buffer *cpu_buf, unsigned long pc,  		return 0;  	} -	if (op_add_code(cpu_buf, backtrace, is_kernel, current)) +	if (op_add_code(cpu_buf, backtrace, is_kernel, tsk))  		goto fail;  	if (op_add_sample(cpu_buf, pc, event)) @@ -292,7 +294,8 @@ static inline void oprofile_end_trace(struct oprofile_cpu_buffer *cpu_buf)  static inline void  __oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs, -			  unsigned long event, int is_kernel) +			  unsigned long event, int is_kernel, +			  struct task_struct *task)  {  	struct oprofile_cpu_buffer *cpu_buf = &__get_cpu_var(op_cpu_buffer);  	unsigned long backtrace = oprofile_backtrace_depth; @@ -301,7 +304,7 @@ __oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,  	 * if log_sample() fail we can't backtrace since we lost the  	 * source of this event  	 */ -	if (!log_sample(cpu_buf, pc, backtrace, is_kernel, event)) +	if (!log_sample(cpu_buf, pc, backtrace, is_kernel, event, task))  		/* failed */  		return; @@ -313,10 +316,17 @@ __oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,  	oprofile_end_trace(cpu_buf);  } +void oprofile_add_ext_hw_sample(unsigned long pc, struct pt_regs * const regs, +				unsigned long event, int is_kernel, +				struct task_struct *task) +{ +	__oprofile_add_ext_sample(pc, regs, event, is_kernel, task); +} +  void oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,  			     unsigned long event, int is_kernel)  { -	__oprofile_add_ext_sample(pc, regs, event, is_kernel); +	__oprofile_add_ext_sample(pc, regs, event, is_kernel, NULL);  }  void oprofile_add_sample(struct pt_regs * const regs, unsigned long event) @@ -332,7 +342,7 @@ void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)  		pc = ESCAPE_CODE; /* as this causes an early return. */  	} -	__oprofile_add_ext_sample(pc, regs, event, is_kernel); +	__oprofile_add_ext_sample(pc, regs, event, is_kernel, NULL);  }  /* @@ -403,7 +413,7 @@ int oprofile_write_commit(struct op_entry *entry)  void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)  {  	struct oprofile_cpu_buffer *cpu_buf = &__get_cpu_var(op_cpu_buffer); -	log_sample(cpu_buf, pc, 0, is_kernel, event); +	log_sample(cpu_buf, pc, 0, is_kernel, event, NULL);  }  void oprofile_add_trace(unsigned long pc) |