| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | #ifndef __ORDERED_EVENTS_H
 | 
					
						
							|  |  |  | #define __ORDERED_EVENTS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 12:20:38 -03:00
										 |  |  | struct perf_sample; | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct ordered_event { | 
					
						
							|  |  |  | 	u64			timestamp; | 
					
						
							|  |  |  | 	u64			file_offset; | 
					
						
							|  |  |  | 	union perf_event	*event; | 
					
						
							|  |  |  | 	struct list_head	list; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum oe_flush { | 
					
						
							| 
									
										
										
										
											2014-06-12 09:50:11 +02:00
										 |  |  | 	OE_FLUSH__NONE, | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | 	OE_FLUSH__FINAL, | 
					
						
							|  |  |  | 	OE_FLUSH__ROUND, | 
					
						
							|  |  |  | 	OE_FLUSH__HALF, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 12:20:38 -03:00
										 |  |  | struct ordered_events; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef int (*ordered_events__deliver_t)(struct ordered_events *oe, | 
					
						
							| 
									
										
										
										
											2015-03-31 12:48:16 -03:00
										 |  |  | 					 struct ordered_event *event); | 
					
						
							| 
									
										
										
										
											2015-03-03 12:20:38 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | struct ordered_events { | 
					
						
							|  |  |  | 	u64			last_flush; | 
					
						
							|  |  |  | 	u64			next_flush; | 
					
						
							|  |  |  | 	u64			max_timestamp; | 
					
						
							|  |  |  | 	u64			max_alloc_size; | 
					
						
							|  |  |  | 	u64			cur_alloc_size; | 
					
						
							|  |  |  | 	struct list_head	events; | 
					
						
							|  |  |  | 	struct list_head	cache; | 
					
						
							|  |  |  | 	struct list_head	to_free; | 
					
						
							|  |  |  | 	struct ordered_event	*buffer; | 
					
						
							|  |  |  | 	struct ordered_event	*last; | 
					
						
							| 
									
										
										
										
											2015-03-03 12:20:38 -03:00
										 |  |  | 	ordered_events__deliver_t deliver; | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | 	int			buffer_idx; | 
					
						
							|  |  |  | 	unsigned int		nr_events; | 
					
						
							| 
									
										
										
										
											2014-06-12 09:50:11 +02:00
										 |  |  | 	enum oe_flush		last_flush_type; | 
					
						
							| 
									
										
										
										
											2015-03-31 12:48:16 -03:00
										 |  |  | 	u32			nr_unordered_events; | 
					
						
							| 
									
										
										
										
											2014-10-03 18:40:11 +04:00
										 |  |  | 	bool                    copy_on_queue; | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 13:02:24 -03:00
										 |  |  | int ordered_events__queue(struct ordered_events *oe, union perf_event *event, | 
					
						
							|  |  |  | 			  struct perf_sample *sample, u64 file_offset); | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); | 
					
						
							| 
									
										
										
										
											2015-03-03 11:58:45 -03:00
										 |  |  | int ordered_events__flush(struct ordered_events *oe, enum oe_flush how); | 
					
						
							| 
									
										
										
										
											2015-03-31 12:48:16 -03:00
										 |  |  | void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver); | 
					
						
							| 
									
										
										
										
											2014-06-10 22:50:03 +02:00
										 |  |  | void ordered_events__free(struct ordered_events *oe); | 
					
						
							| 
									
										
										
										
											2014-06-05 11:00:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline | 
					
						
							|  |  |  | void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	oe->max_alloc_size = size; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-10-03 18:40:11 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline | 
					
						
							|  |  |  | void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	oe->copy_on_queue = copy; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-08-01 13:02:58 -03:00
										 |  |  | #endif /* __ORDERED_EVENTS_H */
 |