1#ifndef __ORDERED_EVENTS_H 2#define __ORDERED_EVENTS_H 3 4#include <linux/types.h> 5 6struct perf_sample; 7 8struct ordered_event { 9 u64 timestamp; 10 u64 file_offset; 11 union perf_event *event; 12 struct list_head list; 13}; 14 15enum oe_flush { 16 OE_FLUSH__NONE, 17 OE_FLUSH__FINAL, 18 OE_FLUSH__ROUND, 19 OE_FLUSH__HALF, 20}; 21 22struct ordered_events; 23 24typedef int (*ordered_events__deliver_t)(struct ordered_events *oe, 25 struct ordered_event *event); 26 27struct ordered_events { 28 u64 last_flush; 29 u64 next_flush; 30 u64 max_timestamp; 31 u64 max_alloc_size; 32 u64 cur_alloc_size; 33 struct list_head events; 34 struct list_head cache; 35 struct list_head to_free; 36 struct ordered_event *buffer; 37 struct ordered_event *last; 38 ordered_events__deliver_t deliver; 39 int buffer_idx; 40 unsigned int nr_events; 41 enum oe_flush last_flush_type; 42 u32 nr_unordered_events; 43 bool copy_on_queue; 44}; 45 46int ordered_events__queue(struct ordered_events *oe, union perf_event *event, 47 struct perf_sample *sample, u64 file_offset); 48void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); 49int ordered_events__flush(struct ordered_events *oe, enum oe_flush how); 50void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver); 51void ordered_events__free(struct ordered_events *oe); 52 53static inline 54void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size) 55{ 56 oe->max_alloc_size = size; 57} 58 59static inline 60void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy) 61{ 62 oe->copy_on_queue = copy; 63} 64#endif /* __ORDERED_EVENTS_H */ 65