diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-08-24 12:25:44 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-08-24 12:25:54 +0200 | 
| commit | 5f9ece02401116b29eb04396b99ea092acb75dd8 (patch) | |
| tree | e10386e2dc63c275646b4eb0bed857da7bf86c6a /include/linux/perf_counter.h | |
| parent | 9f51e24ee8b5a1595b6a5ac0c2be278a16488e75 (diff) | |
| parent | 422bef879e84104fee6dc68ded0e371dbeb5f88e (diff) | |
| download | olio-linux-3.10-5f9ece02401116b29eb04396b99ea092acb75dd8.tar.xz olio-linux-3.10-5f9ece02401116b29eb04396b99ea092acb75dd8.zip  | |
Merge commit 'v2.6.31-rc7' into x86/cleanups
Merge reason: we were on -rc1 before - go up to -rc7
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/perf_counter.h')
| -rw-r--r-- | include/linux/perf_counter.h | 74 | 
1 files changed, 57 insertions, 17 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 5e970c7d3fd..b53f7006cc4 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h @@ -115,26 +115,44 @@ enum perf_counter_sample_format {  	PERF_SAMPLE_TID				= 1U << 1,  	PERF_SAMPLE_TIME			= 1U << 2,  	PERF_SAMPLE_ADDR			= 1U << 3, -	PERF_SAMPLE_GROUP			= 1U << 4, +	PERF_SAMPLE_READ			= 1U << 4,  	PERF_SAMPLE_CALLCHAIN			= 1U << 5,  	PERF_SAMPLE_ID				= 1U << 6,  	PERF_SAMPLE_CPU				= 1U << 7,  	PERF_SAMPLE_PERIOD			= 1U << 8, +	PERF_SAMPLE_STREAM_ID			= 1U << 9, +	PERF_SAMPLE_RAW				= 1U << 10, -	PERF_SAMPLE_MAX = 1U << 9,		/* non-ABI */ +	PERF_SAMPLE_MAX = 1U << 11,		/* non-ABI */  };  /* - * Bits that can be set in attr.read_format to request that - * reads on the counter should return the indicated quantities, - * in increasing order of bit value, after the counter value. + * The format of the data returned by read() on a perf counter fd, + * as specified by attr.read_format: + * + * struct read_format { + * 	{ u64		value; + * 	  { u64		time_enabled; } && PERF_FORMAT_ENABLED + * 	  { u64		time_running; } && PERF_FORMAT_RUNNING + * 	  { u64		id;           } && PERF_FORMAT_ID + * 	} && !PERF_FORMAT_GROUP + * + * 	{ u64		nr; + * 	  { u64		time_enabled; } && PERF_FORMAT_ENABLED + * 	  { u64		time_running; } && PERF_FORMAT_RUNNING + * 	  { u64		value; + * 	    { u64	id;           } && PERF_FORMAT_ID + * 	  }		cntr[nr]; + * 	} && PERF_FORMAT_GROUP + * };   */  enum perf_counter_read_format {  	PERF_FORMAT_TOTAL_TIME_ENABLED		= 1U << 0,  	PERF_FORMAT_TOTAL_TIME_RUNNING		= 1U << 1,  	PERF_FORMAT_ID				= 1U << 2, +	PERF_FORMAT_GROUP			= 1U << 3, -	PERF_FORMAT_MAX = 1U << 3, 		/* non-ABI */ +	PERF_FORMAT_MAX = 1U << 4, 		/* non-ABI */  };  #define PERF_ATTR_SIZE_VER0	64	/* sizeof first published struct */ @@ -180,8 +198,9 @@ struct perf_counter_attr {  				freq           :  1, /* use freq, not period  */  				inherit_stat   :  1, /* per task counts       */  				enable_on_exec :  1, /* next exec enables     */ +				task           :  1, /* trace fork/exit       */ -				__reserved_1   : 51; +				__reserved_1   : 50;  	__u32			wakeup_events;	/* wakeup every n events */  	__u32			__reserved_2; @@ -310,18 +329,18 @@ enum perf_event_type {  	/*  	 * struct {  	 *	struct perf_event_header	header; -	 *	u64				time; -	 *	u64				id; -	 *	u64				sample_period; +	 *	u32				pid, ppid; +	 *	u32				tid, ptid;  	 * };  	 */ -	PERF_EVENT_PERIOD		= 4, +	PERF_EVENT_EXIT			= 4,  	/*  	 * struct {  	 *	struct perf_event_header	header;  	 *	u64				time;  	 *	u64				id; +	 *	u64				stream_id;  	 * };  	 */  	PERF_EVENT_THROTTLE		= 5, @@ -331,6 +350,7 @@ enum perf_event_type {  	 * struct {  	 *	struct perf_event_header	header;  	 *	u32				pid, ppid; +	 *	u32				tid, ptid;  	 * };  	 */  	PERF_EVENT_FORK			= 7, @@ -339,10 +359,8 @@ enum perf_event_type {  	 * struct {  	 * 	struct perf_event_header	header;  	 * 	u32				pid, tid; -	 * 	u64				value; -	 * 	{ u64		time_enabled; 	} && PERF_FORMAT_ENABLED -	 * 	{ u64		time_running; 	} && PERF_FORMAT_RUNNING -	 * 	{ u64		parent_id;	} && PERF_FORMAT_ID +	 * +	 * 	struct read_format		values;  	 * };  	 */  	PERF_EVENT_READ			= 8, @@ -356,14 +374,28 @@ enum perf_event_type {  	 *	{ u64			time;     } && PERF_SAMPLE_TIME  	 *	{ u64			addr;     } && PERF_SAMPLE_ADDR  	 *	{ u64			id;	  } && PERF_SAMPLE_ID +	 *	{ u64			stream_id;} && PERF_SAMPLE_STREAM_ID  	 *	{ u32			cpu, res; } && PERF_SAMPLE_CPU  	 * 	{ u64			period;   } && PERF_SAMPLE_PERIOD  	 * -	 *	{ u64			nr; -	 *	  { u64 id, val; }	cnt[nr];  } && PERF_SAMPLE_GROUP +	 *	{ struct read_format	values;	  } && PERF_SAMPLE_READ  	 *  	 *	{ u64			nr,  	 *	  u64			ips[nr];  } && PERF_SAMPLE_CALLCHAIN +	 * +	 * 	# +	 * 	# The RAW record below is opaque data wrt the ABI +	 * 	# +	 * 	# That is, the ABI doesn't make any promises wrt to +	 * 	# the stability of its content, it may vary depending +	 * 	# on event, hardware, kernel version and phase of +	 * 	# the moon. +	 * 	# +	 * 	# In other words, PERF_SAMPLE_RAW contents are not an ABI. +	 * 	# +	 * +	 *	{ u32			size; +	 *	  char                  data[size];}&& PERF_SAMPLE_RAW  	 * };  	 */  	PERF_EVENT_SAMPLE		= 9, @@ -409,6 +441,11 @@ struct perf_callchain_entry {  	__u64				ip[PERF_MAX_STACK_DEPTH];  }; +struct perf_raw_record { +	u32				size; +	void				*data; +}; +  struct task_struct;  /** @@ -677,10 +714,13 @@ struct perf_sample_data {  	struct pt_regs			*regs;  	u64				addr;  	u64				period; +	struct perf_raw_record		*raw;  };  extern int perf_counter_overflow(struct perf_counter *counter, int nmi,  				 struct perf_sample_data *data); +extern void perf_counter_output(struct perf_counter *counter, int nmi, +				struct perf_sample_data *data);  /*   * Return 1 for a software counter, 0 for a hardware counter  |