| /* |
| * Copyright (c) 2018 Google, Inc. |
| * |
| * SPDX-License-Identifier: GPL-2.0-or-later |
| */ |
| |
| #ifndef _LTP_TRACE_PARSE_H_ |
| #define _LTP_TRACE_PARSE_H_ |
| |
| enum { |
| TRACE_RECORD_OTHER = 0, |
| TRACE_RECORD_SCHED_PROCESS_EXIT, |
| TRACE_RECORD_SCHED_PROCESS_FORK, |
| TRACE_RECORD_SCHED_SWITCH, |
| TRACE_RECORD_SCHED_WAKEUP, |
| TRACE_RECORD_SUGOV_UTIL_UPDATE, |
| TRACE_RECORD_SUGOV_NEXT_FREQ, |
| TRACE_RECORD_CPU_FREQUENCY, |
| TRACE_RECORD_TRACING_MARK_WRITE, |
| }; |
| |
| #define IRQ_CONTEXT_NORMAL '.' |
| #define IRQ_CONTEXT_SOFT 's' |
| #define IRQ_CONTEXT_HARD 'h' |
| #define IRQ_CONTEXT_HARD_IN_SOFT 'H' |
| #define IRQ_CONTEXT_NMI 'z' |
| #define IRQ_CONTEXT_NMI_IN_HARD 'Z' |
| |
| struct trace_timestamp { |
| unsigned int sec; |
| unsigned int usec; |
| }; |
| |
| struct trace_cpu_frequency { |
| unsigned int state; |
| unsigned short cpu; |
| }; |
| |
| struct trace_sched_switch { |
| char prev_comm[17]; |
| unsigned short prev_pid; |
| unsigned short prev_prio; |
| char prev_state; |
| char next_comm[17]; |
| unsigned short next_pid; |
| unsigned short next_prio; |
| }; |
| |
| struct trace_sched_wakeup { |
| char comm[17]; |
| unsigned short pid; |
| unsigned short prio; |
| unsigned short cpu; |
| }; |
| |
| struct trace_sugov_util_update { |
| int cpu; |
| int util; |
| int avg_cap; |
| int max_cap; |
| }; |
| |
| struct trace_sugov_next_freq { |
| int cpu; |
| int util; |
| int max; |
| int freq; |
| }; |
| |
| struct trace_record { |
| char task[17]; |
| unsigned short pid; |
| unsigned short cpu; |
| |
| #define TRACE_RECORD_IRQS_OFF 0x1 |
| #define TRACE_RECORD_TIF_NEED_RESCHED 0x2 |
| #define TRACE_RECORD_PREEMPT_NEED_RESCHED 0x4 |
| unsigned short flags; |
| unsigned char irq_context; |
| unsigned short preempt_depth; |
| |
| struct trace_timestamp ts; |
| |
| unsigned int event_type; |
| void *event_data; |
| }; |
| |
| extern int num_trace_records; |
| extern struct trace_record *trace; |
| extern char *ftrace_root_dir; |
| |
| void tracefs_write(const char *file_name, const char *value); |
| void trace_setup(void); |
| void trace_cleanup(void); |
| void print_trace_record(struct trace_record *tr); |
| struct trace_record *load_trace(void); |
| |
| #define LOAD_TRACE() \ |
| if (!load_trace()) \ |
| tst_brk(TBROK, "Failed to load trace.\n"); |
| |
| #endif /* _LTP_TRACE_PARSE_H_ */ |