xref: /linux/tools/tracing/rtla/src/common.h (revision d9f24f8e60798c066ead61f77e67ee6a5a204514)
134482388SCosta Shulyupin /* SPDX-License-Identifier: GPL-2.0 */
234482388SCosta Shulyupin #pragma once
334482388SCosta Shulyupin 
4*2f3172f9SCrystal Wood #include "actions.h"
5*2f3172f9SCrystal Wood #include "timerlat_u.h"
6263d7eacSCrystal Wood #include "trace.h"
734482388SCosta Shulyupin #include "utils.h"
834482388SCosta Shulyupin 
9263d7eacSCrystal Wood /*
10263d7eacSCrystal Wood  * osnoise_context - read, store, write, restore osnoise configs.
11263d7eacSCrystal Wood  */
12263d7eacSCrystal Wood struct osnoise_context {
13263d7eacSCrystal Wood 	int			flags;
14263d7eacSCrystal Wood 	int			ref;
15263d7eacSCrystal Wood 
16263d7eacSCrystal Wood 	char			*curr_cpus;
17263d7eacSCrystal Wood 	char			*orig_cpus;
18263d7eacSCrystal Wood 
19263d7eacSCrystal Wood 	/* 0 as init value */
20263d7eacSCrystal Wood 	unsigned long long	orig_runtime_us;
21263d7eacSCrystal Wood 	unsigned long long	runtime_us;
22263d7eacSCrystal Wood 
23263d7eacSCrystal Wood 	/* 0 as init value */
24263d7eacSCrystal Wood 	unsigned long long	orig_period_us;
25263d7eacSCrystal Wood 	unsigned long long	period_us;
26263d7eacSCrystal Wood 
27263d7eacSCrystal Wood 	/* 0 as init value */
28263d7eacSCrystal Wood 	long long		orig_timerlat_period_us;
29263d7eacSCrystal Wood 	long long		timerlat_period_us;
30263d7eacSCrystal Wood 
31263d7eacSCrystal Wood 	/* 0 as init value */
32263d7eacSCrystal Wood 	long long		orig_tracing_thresh;
33263d7eacSCrystal Wood 	long long		tracing_thresh;
34263d7eacSCrystal Wood 
35263d7eacSCrystal Wood 	/* -1 as init value because 0 is disabled */
36263d7eacSCrystal Wood 	long long		orig_stop_us;
37263d7eacSCrystal Wood 	long long		stop_us;
38263d7eacSCrystal Wood 
39263d7eacSCrystal Wood 	/* -1 as init value because 0 is disabled */
40263d7eacSCrystal Wood 	long long		orig_stop_total_us;
41263d7eacSCrystal Wood 	long long		stop_total_us;
42263d7eacSCrystal Wood 
43263d7eacSCrystal Wood 	/* -1 as init value because 0 is disabled */
44263d7eacSCrystal Wood 	long long		orig_print_stack;
45263d7eacSCrystal Wood 	long long		print_stack;
46263d7eacSCrystal Wood 
47263d7eacSCrystal Wood 	/* -1 as init value because 0 is off */
48263d7eacSCrystal Wood 	int			orig_opt_irq_disable;
49263d7eacSCrystal Wood 	int			opt_irq_disable;
50263d7eacSCrystal Wood 
51263d7eacSCrystal Wood 	/* -1 as init value because 0 is off */
52263d7eacSCrystal Wood 	int			orig_opt_workload;
53263d7eacSCrystal Wood 	int			opt_workload;
54263d7eacSCrystal Wood };
55263d7eacSCrystal Wood 
56*2f3172f9SCrystal Wood extern struct trace_instance *trace_inst;
57*2f3172f9SCrystal Wood extern int stop_tracing;
58263d7eacSCrystal Wood 
595742bf62SCrystal Wood struct hist_params {
605742bf62SCrystal Wood 	char			no_irq;
615742bf62SCrystal Wood 	char			no_thread;
625742bf62SCrystal Wood 	char			no_header;
635742bf62SCrystal Wood 	char			no_summary;
645742bf62SCrystal Wood 	char			no_index;
655742bf62SCrystal Wood 	char			with_zeros;
665742bf62SCrystal Wood 	int			bucket_size;
675742bf62SCrystal Wood 	int			entries;
685742bf62SCrystal Wood };
695742bf62SCrystal Wood 
7034482388SCosta Shulyupin /*
7134482388SCosta Shulyupin  * common_params - Parameters shared between timerlat_params and osnoise_params
7234482388SCosta Shulyupin  */
7334482388SCosta Shulyupin struct common_params {
7434482388SCosta Shulyupin 	/* trace configuration */
7534482388SCosta Shulyupin 	char			*cpus;
7634482388SCosta Shulyupin 	cpu_set_t		monitored_cpus;
7734482388SCosta Shulyupin 	struct trace_events	*events;
7834482388SCosta Shulyupin 	int			buffer_size;
7934482388SCosta Shulyupin 
8034482388SCosta Shulyupin 	/* Timing parameters */
8134482388SCosta Shulyupin 	int			warmup;
8234482388SCosta Shulyupin 	long long		stop_us;
8334482388SCosta Shulyupin 	long long		stop_total_us;
8434482388SCosta Shulyupin 	int			sleep_time;
8534482388SCosta Shulyupin 	int			duration;
8634482388SCosta Shulyupin 
8734482388SCosta Shulyupin 	/* Scheduling parameters */
8834482388SCosta Shulyupin 	int			set_sched;
8934482388SCosta Shulyupin 	struct sched_attr	sched_param;
9034482388SCosta Shulyupin 	int			cgroup;
9134482388SCosta Shulyupin 	char			*cgroup_name;
9234482388SCosta Shulyupin 	int			hk_cpus;
9334482388SCosta Shulyupin 	cpu_set_t		hk_cpu_set;
945742bf62SCrystal Wood 
955742bf62SCrystal Wood 	/* Other parameters */
965742bf62SCrystal Wood 	struct hist_params	hist;
975742bf62SCrystal Wood 	int			output_divisor;
985742bf62SCrystal Wood 	int			pretty_output;
995742bf62SCrystal Wood 	int			quiet;
100*2f3172f9SCrystal Wood 	int			user_workload;
101263d7eacSCrystal Wood 	int			kernel_workload;
102*2f3172f9SCrystal Wood 	int			user_data;
103*2f3172f9SCrystal Wood 	int			aa_only;
104*2f3172f9SCrystal Wood 
105*2f3172f9SCrystal Wood 	struct actions		threshold_actions;
106*2f3172f9SCrystal Wood 	struct actions		end_actions;
107*2f3172f9SCrystal Wood 	struct timerlat_u_params user;
108*2f3172f9SCrystal Wood };
109*2f3172f9SCrystal Wood 
110*2f3172f9SCrystal Wood struct tool_ops;
111*2f3172f9SCrystal Wood 
112*2f3172f9SCrystal Wood /*
113*2f3172f9SCrystal Wood  * osnoise_tool -  osnoise based tool definition.
114*2f3172f9SCrystal Wood  *
115*2f3172f9SCrystal Wood  * Only the "trace" and "context" fields are used for
116*2f3172f9SCrystal Wood  * the additional trace instances (record and aa).
117*2f3172f9SCrystal Wood  */
118*2f3172f9SCrystal Wood struct osnoise_tool {
119*2f3172f9SCrystal Wood 	struct tool_ops			*ops;
120*2f3172f9SCrystal Wood 	struct trace_instance		trace;
121*2f3172f9SCrystal Wood 	struct osnoise_context		*context;
122*2f3172f9SCrystal Wood 	void				*data;
123*2f3172f9SCrystal Wood 	struct common_params		*params;
124*2f3172f9SCrystal Wood 	time_t				start_time;
125*2f3172f9SCrystal Wood 	struct osnoise_tool		*record;
126*2f3172f9SCrystal Wood 	struct osnoise_tool		*aa;
127*2f3172f9SCrystal Wood };
128*2f3172f9SCrystal Wood 
129*2f3172f9SCrystal Wood struct tool_ops {
130*2f3172f9SCrystal Wood 	const char *tracer;
131*2f3172f9SCrystal Wood 	const char *comm_prefix;
132*2f3172f9SCrystal Wood 	struct common_params *(*parse_args)(int argc, char *argv[]);
133*2f3172f9SCrystal Wood 	struct osnoise_tool *(*init_tool)(struct common_params *params);
134*2f3172f9SCrystal Wood 	int (*apply_config)(struct osnoise_tool *tool);
135*2f3172f9SCrystal Wood 	int (*enable)(struct osnoise_tool *tool);
136*2f3172f9SCrystal Wood 	int (*main)(struct osnoise_tool *tool);
137*2f3172f9SCrystal Wood 	void (*print_stats)(struct osnoise_tool *tool);
138*2f3172f9SCrystal Wood 	void (*analyze)(struct osnoise_tool *tool, bool stopped);
139*2f3172f9SCrystal Wood 	void (*free)(struct osnoise_tool *tool);
14034482388SCosta Shulyupin };
141263d7eacSCrystal Wood 
142263d7eacSCrystal Wood int osnoise_set_cpus(struct osnoise_context *context, char *cpus);
143263d7eacSCrystal Wood void osnoise_restore_cpus(struct osnoise_context *context);
144263d7eacSCrystal Wood 
145263d7eacSCrystal Wood int osnoise_set_workload(struct osnoise_context *context, bool onoff);
146263d7eacSCrystal Wood 
147*2f3172f9SCrystal Wood void osnoise_destroy_tool(struct osnoise_tool *top);
148*2f3172f9SCrystal Wood struct osnoise_tool *osnoise_init_tool(char *tool_name);
149*2f3172f9SCrystal Wood struct osnoise_tool *osnoise_init_trace_tool(const char *tracer);
150*2f3172f9SCrystal Wood bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *record);
151*2f3172f9SCrystal Wood 
152263d7eacSCrystal Wood int common_apply_config(struct osnoise_tool *tool, struct common_params *params);
153*2f3172f9SCrystal Wood int top_main_loop(struct osnoise_tool *tool);
154*2f3172f9SCrystal Wood int hist_main_loop(struct osnoise_tool *tool);
155