cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ordered-events.h (2033B)


      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	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 inline
     68void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
     69{
     70	oe->max_alloc_size = size;
     71}
     72
     73static inline
     74void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy)
     75{
     76	oe->copy_on_queue = copy;
     77}
     78#endif /* __ORDERED_EVENTS_H */