blob: 96e5292d88e2584ba0d78abd3b23a3f3b5237073 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Jiri Olsa5f86b802014-08-01 13:02:58 -03002#ifndef __ORDERED_EVENTS_H
3#define __ORDERED_EVENTS_H
4
5#include <linux/types.h>
Jiri Olsa5f86b802014-08-01 13:02:58 -03006
Arnaldo Carvalho de Melod10eb1e2015-03-03 12:20:38 -03007struct perf_sample;
Jiri Olsa5f86b802014-08-01 13:02:58 -03008
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 {
Jiri Olsab0a45202014-06-12 09:50:11 +020017 OE_FLUSH__NONE,
Jiri Olsa5f86b802014-08-01 13:02:58 -030018 OE_FLUSH__FINAL,
19 OE_FLUSH__ROUND,
20 OE_FLUSH__HALF,
21};
22
Arnaldo Carvalho de Melod10eb1e2015-03-03 12:20:38 -030023struct ordered_events;
24
25typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
Arnaldo Carvalho de Melo9870d782015-03-31 12:48:16 -030026 struct ordered_event *event);
Arnaldo Carvalho de Melod10eb1e2015-03-03 12:20:38 -030027
Jiri Olsa5f86b802014-08-01 13:02:58 -030028struct ordered_events {
29 u64 last_flush;
30 u64 next_flush;
31 u64 max_timestamp;
32 u64 max_alloc_size;
33 u64 cur_alloc_size;
34 struct list_head events;
35 struct list_head cache;
36 struct list_head to_free;
37 struct ordered_event *buffer;
38 struct ordered_event *last;
Arnaldo Carvalho de Melod10eb1e2015-03-03 12:20:38 -030039 ordered_events__deliver_t deliver;
Jiri Olsa5f86b802014-08-01 13:02:58 -030040 int buffer_idx;
41 unsigned int nr_events;
Jiri Olsab0a45202014-06-12 09:50:11 +020042 enum oe_flush last_flush_type;
Arnaldo Carvalho de Melo9870d782015-03-31 12:48:16 -030043 u32 nr_unordered_events;
Alexander Yarygin54bf53b2014-10-03 18:40:11 +040044 bool copy_on_queue;
Jiri Olsa5f86b802014-08-01 13:02:58 -030045};
46
Arnaldo Carvalho de Melo4a6b3622015-03-03 13:02:24 -030047int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
48 struct perf_sample *sample, u64 file_offset);
Jiri Olsa5f86b802014-08-01 13:02:58 -030049void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
Arnaldo Carvalho de Melob7b61cb2015-03-03 11:58:45 -030050int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
Arnaldo Carvalho de Melo9870d782015-03-31 12:48:16 -030051void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver);
Jiri Olsaadc56ed2014-06-10 22:50:03 +020052void ordered_events__free(struct ordered_events *oe);
Wang Nan4532f642016-04-13 08:21:04 +000053void ordered_events__reinit(struct ordered_events *oe);
Jiri Olsa94786b62014-06-05 11:00:20 +020054
55static inline
56void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
57{
58 oe->max_alloc_size = size;
59}
Alexander Yarygin54bf53b2014-10-03 18:40:11 +040060
61static inline
62void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy)
63{
64 oe->copy_on_queue = copy;
65}
Jiri Olsa5f86b802014-08-01 13:02:58 -030066#endif /* __ORDERED_EVENTS_H */