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