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