diff options
Diffstat (limited to 'include/linux/perf_event.h')
| -rw-r--r-- | include/linux/perf_event.h | 29 | 
1 files changed, 28 insertions, 1 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 866e85c5eb94..2e069d1288df 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -294,9 +294,31 @@ struct ring_buffer;   */  struct perf_event {  #ifdef CONFIG_PERF_EVENTS -	struct list_head		group_entry; +	/* +	 * entry onto perf_event_context::event_list; +	 *   modifications require ctx->lock +	 *   RCU safe iterations. +	 */  	struct list_head		event_entry; + +	/* +	 * XXX: group_entry and sibling_list should be mutually exclusive; +	 * either you're a sibling on a group, or you're the group leader. +	 * Rework the code to always use the same list element. +	 * +	 * Locked for modification by both ctx->mutex and ctx->lock; holding +	 * either sufficies for read. +	 */ +	struct list_head		group_entry;  	struct list_head		sibling_list; + +	/* +	 * We need storage to track the entries in perf_pmu_migrate_context; we +	 * cannot use the event_entry because of RCU and we want to keep the +	 * group in tact which avoids us using the other two entries. +	 */ +	struct list_head		migrate_entry; +  	struct hlist_node		hlist_entry;  	int				nr_siblings;  	int				group_flags; @@ -562,6 +584,10 @@ struct perf_sample_data {  	struct perf_regs_user		regs_user;  	u64				stack_user_size;  	u64				weight; +	/* +	 * Transaction flags for abort events: +	 */ +	u64				txn;  };  static inline void perf_sample_data_init(struct perf_sample_data *data, @@ -577,6 +603,7 @@ static inline void perf_sample_data_init(struct perf_sample_data *data,  	data->stack_user_size = 0;  	data->weight = 0;  	data->data_src.val = 0; +	data->txn = 0;  }  extern void perf_output_sample(struct perf_output_handle *handle,  |