xref: /aosp_15_r20/external/ltp/testcases/kernel/sched/eas/trace_parse.h (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1 /*
2  * Copyright (c) 2018 Google, Inc.
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 #ifndef _LTP_TRACE_PARSE_H_
8 #define _LTP_TRACE_PARSE_H_
9 
10 enum {
11 	TRACE_RECORD_OTHER = 0,
12 	TRACE_RECORD_SCHED_PROCESS_EXIT,
13 	TRACE_RECORD_SCHED_PROCESS_FORK,
14 	TRACE_RECORD_SCHED_SWITCH,
15 	TRACE_RECORD_SCHED_WAKEUP,
16 	TRACE_RECORD_SUGOV_UTIL_UPDATE,
17 	TRACE_RECORD_SUGOV_NEXT_FREQ,
18 	TRACE_RECORD_CPU_FREQUENCY,
19 	TRACE_RECORD_TRACING_MARK_WRITE,
20 };
21 
22 #define IRQ_CONTEXT_NORMAL '.'
23 #define IRQ_CONTEXT_SOFT 's'
24 #define IRQ_CONTEXT_HARD 'h'
25 #define IRQ_CONTEXT_HARD_IN_SOFT 'H'
26 #define IRQ_CONTEXT_NMI 'z'
27 #define IRQ_CONTEXT_NMI_IN_HARD 'Z'
28 
29 struct trace_timestamp {
30 	unsigned int sec;
31 	unsigned int usec;
32 };
33 
34 struct trace_cpu_frequency {
35 	unsigned int state;
36 	unsigned short cpu;
37 };
38 
39 struct trace_sched_switch {
40 	char prev_comm[17];
41 	unsigned short prev_pid;
42 	unsigned short prev_prio;
43 	char prev_state;
44 	char next_comm[17];
45 	unsigned short next_pid;
46 	unsigned short next_prio;
47 };
48 
49 struct trace_sched_wakeup {
50 	char comm[17];
51 	unsigned short pid;
52 	unsigned short prio;
53 	unsigned short cpu;
54 };
55 
56 struct trace_sugov_util_update {
57 	int cpu;
58 	int util;
59 	int avg_cap;
60 	int max_cap;
61 };
62 
63 struct trace_sugov_next_freq {
64 	int cpu;
65 	int util;
66 	int max;
67 	int freq;
68 };
69 
70 struct trace_record {
71 	char task[17];
72 	unsigned short pid;
73 	unsigned short cpu;
74 
75 #define TRACE_RECORD_IRQS_OFF 0x1
76 #define TRACE_RECORD_TIF_NEED_RESCHED 0x2
77 #define TRACE_RECORD_PREEMPT_NEED_RESCHED 0x4
78 	unsigned short flags;
79 	unsigned char irq_context;
80 	unsigned short preempt_depth;
81 	unsigned short migrate_disable;
82 
83 	struct trace_timestamp ts;
84 
85 	unsigned int event_type;
86 	void *event_data;
87 };
88 
89 extern int num_trace_records;
90 extern struct trace_record *trace;
91 extern char *ftrace_root_dir;
92 
93 void tracefs_write(const char *file_name, const char *value);
94 void trace_setup(void);
95 void trace_cleanup(void);
96 void print_trace_record(struct trace_record *tr);
97 struct trace_record *load_trace(void);
98 
99 #define LOAD_TRACE() \
100 	if (!load_trace()) \
101 		tst_brk(TBROK, "Failed to load trace.\n");
102 
103 #endif /* _LTP_TRACE_PARSE_H_ */
104