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 /* 11 * It is necessary to define TRACE_EVENTS to communicate the events to trace. */ 12 #define TRACING_DIR "/sys/kernel/debug/tracing/" 13 14 enum { 15 TRACE_RECORD_OTHER = 0, 16 TRACE_RECORD_SCHED_PROCESS_EXIT, 17 TRACE_RECORD_SCHED_PROCESS_FORK, 18 TRACE_RECORD_SCHED_SWITCH, 19 TRACE_RECORD_SCHED_WAKEUP, 20 TRACE_RECORD_SUGOV_UTIL_UPDATE, 21 TRACE_RECORD_SUGOV_NEXT_FREQ, 22 TRACE_RECORD_CPU_FREQUENCY, 23 TRACE_RECORD_TRACING_MARK_WRITE, 24 }; 25 26 #define IRQ_CONTEXT_NORMAL '.' 27 #define IRQ_CONTEXT_SOFT 's' 28 #define IRQ_CONTEXT_HARD 'h' 29 #define IRQ_CONTEXT_HARD_IN_SOFT 'H' 30 #define IRQ_CONTEXT_NMI 'z' 31 #define IRQ_CONTEXT_NMI_IN_HARD 'Z' 32 33 struct timestamp { 34 unsigned int sec; 35 unsigned int usec; 36 }; 37 38 struct trace_cpu_frequency { 39 unsigned int state; 40 unsigned short cpu; 41 }; 42 43 struct trace_sched_switch { 44 char prev_comm[17]; 45 unsigned short prev_pid; 46 unsigned short prev_prio; 47 char prev_state; 48 char next_comm[17]; 49 unsigned short next_pid; 50 unsigned short next_prio; 51 }; 52 53 struct trace_sched_wakeup { 54 char comm[17]; 55 unsigned short pid; 56 unsigned short prio; 57 unsigned short cpu; 58 }; 59 60 struct trace_sugov_util_update { 61 int cpu; 62 int util; 63 int avg_cap; 64 int max_cap; 65 }; 66 67 struct trace_sugov_next_freq { 68 int cpu; 69 int util; 70 int max; 71 int freq; 72 }; 73 74 struct trace_record { 75 char task[17]; 76 unsigned short pid; 77 unsigned short cpu; 78 79 #define TRACE_RECORD_IRQS_OFF 0x1 80 #define TRACE_RECORD_TIF_NEED_RESCHED 0x2 81 #define TRACE_RECORD_PREEMPT_NEED_RESCHED 0x4 82 unsigned short flags; 83 unsigned char irq_context; 84 unsigned short preempt_depth; 85 86 struct timestamp ts; 87 88 unsigned int event_type; 89 void *event_data; 90 }; 91 92 extern int num_trace_records; 93 extern struct trace_record *trace; 94 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