1*58e6ee5fSAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 */
2*58e6ee5fSAndroid Build Coastguard Worker /*
3*58e6ee5fSAndroid Build Coastguard Worker * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <[email protected]>
4*58e6ee5fSAndroid Build Coastguard Worker *
5*58e6ee5fSAndroid Build Coastguard Worker */
6*58e6ee5fSAndroid Build Coastguard Worker #ifndef __TRACE_LOCAL_H
7*58e6ee5fSAndroid Build Coastguard Worker #define __TRACE_LOCAL_H
8*58e6ee5fSAndroid Build Coastguard Worker
9*58e6ee5fSAndroid Build Coastguard Worker #include <sys/types.h>
10*58e6ee5fSAndroid Build Coastguard Worker #include <dirent.h> /* for DIR */
11*58e6ee5fSAndroid Build Coastguard Worker #include <ctype.h> /* for isdigit() */
12*58e6ee5fSAndroid Build Coastguard Worker #include <errno.h>
13*58e6ee5fSAndroid Build Coastguard Worker #include <limits.h>
14*58e6ee5fSAndroid Build Coastguard Worker
15*58e6ee5fSAndroid Build Coastguard Worker #include "trace-cmd-private.h"
16*58e6ee5fSAndroid Build Coastguard Worker #include "event-utils.h"
17*58e6ee5fSAndroid Build Coastguard Worker
18*58e6ee5fSAndroid Build Coastguard Worker #define TRACE_AGENT_DEFAULT_PORT 823
19*58e6ee5fSAndroid Build Coastguard Worker
20*58e6ee5fSAndroid Build Coastguard Worker #define DEFAULT_INPUT_FILE "trace.dat"
21*58e6ee5fSAndroid Build Coastguard Worker #define GUEST_PIPE_NAME "trace-pipe-cpu"
22*58e6ee5fSAndroid Build Coastguard Worker #define GUEST_DIR_FMT "/var/lib/trace-cmd/virt/%s"
23*58e6ee5fSAndroid Build Coastguard Worker #define GUEST_FIFO_FMT GUEST_DIR_FMT "/" GUEST_PIPE_NAME "%d"
24*58e6ee5fSAndroid Build Coastguard Worker #define VIRTIO_FIFO_FMT "/dev/virtio-ports/" GUEST_PIPE_NAME "%d"
25*58e6ee5fSAndroid Build Coastguard Worker
26*58e6ee5fSAndroid Build Coastguard Worker /* fix stupid glib guint64 typecasts and printf formats */
27*58e6ee5fSAndroid Build Coastguard Worker typedef unsigned long long u64;
28*58e6ee5fSAndroid Build Coastguard Worker
29*58e6ee5fSAndroid Build Coastguard Worker struct buffer_instance;
30*58e6ee5fSAndroid Build Coastguard Worker
31*58e6ee5fSAndroid Build Coastguard Worker #define __printf(a, b) __attribute__((format(printf,a,b)))
32*58e6ee5fSAndroid Build Coastguard Worker
33*58e6ee5fSAndroid Build Coastguard Worker __printf(1,2)
34*58e6ee5fSAndroid Build Coastguard Worker void warning(const char *fmt, ...);
35*58e6ee5fSAndroid Build Coastguard Worker
36*58e6ee5fSAndroid Build Coastguard Worker /* for local shared information with trace-cmd executable */
37*58e6ee5fSAndroid Build Coastguard Worker
38*58e6ee5fSAndroid Build Coastguard Worker void usage(char **argv);
39*58e6ee5fSAndroid Build Coastguard Worker
40*58e6ee5fSAndroid Build Coastguard Worker extern int silence_warnings;
41*58e6ee5fSAndroid Build Coastguard Worker extern int show_status;
42*58e6ee5fSAndroid Build Coastguard Worker
43*58e6ee5fSAndroid Build Coastguard Worker int trace_set_verbose(char *level);
44*58e6ee5fSAndroid Build Coastguard Worker
45*58e6ee5fSAndroid Build Coastguard Worker enum port_type {
46*58e6ee5fSAndroid Build Coastguard Worker USE_UDP = 0, /* Default setting */
47*58e6ee5fSAndroid Build Coastguard Worker USE_TCP,
48*58e6ee5fSAndroid Build Coastguard Worker USE_VSOCK
49*58e6ee5fSAndroid Build Coastguard Worker };
50*58e6ee5fSAndroid Build Coastguard Worker
51*58e6ee5fSAndroid Build Coastguard Worker struct pid_record_data {
52*58e6ee5fSAndroid Build Coastguard Worker int pid;
53*58e6ee5fSAndroid Build Coastguard Worker int brass[2];
54*58e6ee5fSAndroid Build Coastguard Worker int cpu;
55*58e6ee5fSAndroid Build Coastguard Worker int closed;
56*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_input *stream;
57*58e6ee5fSAndroid Build Coastguard Worker struct buffer_instance *instance;
58*58e6ee5fSAndroid Build Coastguard Worker struct tep_record *record;
59*58e6ee5fSAndroid Build Coastguard Worker };
60*58e6ee5fSAndroid Build Coastguard Worker
61*58e6ee5fSAndroid Build Coastguard Worker void show_file(const char *name);
62*58e6ee5fSAndroid Build Coastguard Worker
63*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_input *read_trace_header(const char *file, int flags);
64*58e6ee5fSAndroid Build Coastguard Worker int read_trace_files(void);
65*58e6ee5fSAndroid Build Coastguard Worker
66*58e6ee5fSAndroid Build Coastguard Worker void trace_record(int argc, char **argv);
67*58e6ee5fSAndroid Build Coastguard Worker
68*58e6ee5fSAndroid Build Coastguard Worker void trace_stop(int argc, char **argv);
69*58e6ee5fSAndroid Build Coastguard Worker
70*58e6ee5fSAndroid Build Coastguard Worker void trace_restart(int argc, char **argv);
71*58e6ee5fSAndroid Build Coastguard Worker
72*58e6ee5fSAndroid Build Coastguard Worker void trace_reset(int argc, char **argv);
73*58e6ee5fSAndroid Build Coastguard Worker
74*58e6ee5fSAndroid Build Coastguard Worker void trace_start(int argc, char **argv);
75*58e6ee5fSAndroid Build Coastguard Worker
76*58e6ee5fSAndroid Build Coastguard Worker void trace_set(int argc, char **argv);
77*58e6ee5fSAndroid Build Coastguard Worker
78*58e6ee5fSAndroid Build Coastguard Worker void trace_extract(int argc, char **argv);
79*58e6ee5fSAndroid Build Coastguard Worker
80*58e6ee5fSAndroid Build Coastguard Worker void trace_stream(int argc, char **argv);
81*58e6ee5fSAndroid Build Coastguard Worker
82*58e6ee5fSAndroid Build Coastguard Worker void trace_profile(int argc, char **argv);
83*58e6ee5fSAndroid Build Coastguard Worker
84*58e6ee5fSAndroid Build Coastguard Worker void trace_report(int argc, char **argv);
85*58e6ee5fSAndroid Build Coastguard Worker
86*58e6ee5fSAndroid Build Coastguard Worker void trace_split(int argc, char **argv);
87*58e6ee5fSAndroid Build Coastguard Worker
88*58e6ee5fSAndroid Build Coastguard Worker void trace_listen(int argc, char **argv);
89*58e6ee5fSAndroid Build Coastguard Worker
90*58e6ee5fSAndroid Build Coastguard Worker void trace_agent(int argc, char **argv);
91*58e6ee5fSAndroid Build Coastguard Worker
92*58e6ee5fSAndroid Build Coastguard Worker void trace_setup_guest(int argc, char **argv);
93*58e6ee5fSAndroid Build Coastguard Worker
94*58e6ee5fSAndroid Build Coastguard Worker void trace_restore(int argc, char **argv);
95*58e6ee5fSAndroid Build Coastguard Worker
96*58e6ee5fSAndroid Build Coastguard Worker void trace_clear(int argc, char **argv);
97*58e6ee5fSAndroid Build Coastguard Worker
98*58e6ee5fSAndroid Build Coastguard Worker void trace_check_events(int argc, char **argv);
99*58e6ee5fSAndroid Build Coastguard Worker
100*58e6ee5fSAndroid Build Coastguard Worker void trace_stack(int argc, char **argv);
101*58e6ee5fSAndroid Build Coastguard Worker
102*58e6ee5fSAndroid Build Coastguard Worker void trace_option(int argc, char **argv);
103*58e6ee5fSAndroid Build Coastguard Worker
104*58e6ee5fSAndroid Build Coastguard Worker void trace_hist(int argc, char **argv);
105*58e6ee5fSAndroid Build Coastguard Worker
106*58e6ee5fSAndroid Build Coastguard Worker void trace_snapshot(int argc, char **argv);
107*58e6ee5fSAndroid Build Coastguard Worker
108*58e6ee5fSAndroid Build Coastguard Worker void trace_mem(int argc, char **argv);
109*58e6ee5fSAndroid Build Coastguard Worker
110*58e6ee5fSAndroid Build Coastguard Worker void trace_stat(int argc, char **argv);
111*58e6ee5fSAndroid Build Coastguard Worker
112*58e6ee5fSAndroid Build Coastguard Worker void trace_show(int argc, char **argv);
113*58e6ee5fSAndroid Build Coastguard Worker
114*58e6ee5fSAndroid Build Coastguard Worker void trace_list(int argc, char **argv);
115*58e6ee5fSAndroid Build Coastguard Worker
116*58e6ee5fSAndroid Build Coastguard Worker void trace_usage(int argc, char **argv);
117*58e6ee5fSAndroid Build Coastguard Worker
118*58e6ee5fSAndroid Build Coastguard Worker void trace_dump(int argc, char **argv);
119*58e6ee5fSAndroid Build Coastguard Worker
120*58e6ee5fSAndroid Build Coastguard Worker void trace_convert(int argc, char **argv);
121*58e6ee5fSAndroid Build Coastguard Worker
122*58e6ee5fSAndroid Build Coastguard Worker int trace_record_agent(struct tracecmd_msg_handle *msg_handle,
123*58e6ee5fSAndroid Build Coastguard Worker int cpus, int *fds,
124*58e6ee5fSAndroid Build Coastguard Worker int argc, char **argv, bool use_fifos,
125*58e6ee5fSAndroid Build Coastguard Worker unsigned long long trace_id, const char *host);
126*58e6ee5fSAndroid Build Coastguard Worker
127*58e6ee5fSAndroid Build Coastguard Worker struct hook_list;
128*58e6ee5fSAndroid Build Coastguard Worker
129*58e6ee5fSAndroid Build Coastguard Worker void trace_init_profile(struct tracecmd_input *handle, struct hook_list *hooks,
130*58e6ee5fSAndroid Build Coastguard Worker int global);
131*58e6ee5fSAndroid Build Coastguard Worker int do_trace_profile(void);
132*58e6ee5fSAndroid Build Coastguard Worker void trace_profile_set_merge_like_comms(void);
133*58e6ee5fSAndroid Build Coastguard Worker
134*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_input *
135*58e6ee5fSAndroid Build Coastguard Worker trace_stream_init(struct buffer_instance *instance, int cpu, int fd, int cpus,
136*58e6ee5fSAndroid Build Coastguard Worker struct hook_list *hooks,
137*58e6ee5fSAndroid Build Coastguard Worker tracecmd_handle_init_func handle_init, int global);
138*58e6ee5fSAndroid Build Coastguard Worker int trace_stream_read(struct pid_record_data *pids, int nr_pids, struct timeval *tv);
139*58e6ee5fSAndroid Build Coastguard Worker
140*58e6ee5fSAndroid Build Coastguard Worker void trace_show_data(struct tracecmd_input *handle, struct tep_record *record);
141*58e6ee5fSAndroid Build Coastguard Worker
142*58e6ee5fSAndroid Build Coastguard Worker /* --- event interation --- */
143*58e6ee5fSAndroid Build Coastguard Worker
144*58e6ee5fSAndroid Build Coastguard Worker /*
145*58e6ee5fSAndroid Build Coastguard Worker * Use this to iterate through the event directories
146*58e6ee5fSAndroid Build Coastguard Worker */
147*58e6ee5fSAndroid Build Coastguard Worker
148*58e6ee5fSAndroid Build Coastguard Worker
149*58e6ee5fSAndroid Build Coastguard Worker enum event_process {
150*58e6ee5fSAndroid Build Coastguard Worker PROCESSED_NONE,
151*58e6ee5fSAndroid Build Coastguard Worker PROCESSED_EVENT,
152*58e6ee5fSAndroid Build Coastguard Worker PROCESSED_SYSTEM
153*58e6ee5fSAndroid Build Coastguard Worker };
154*58e6ee5fSAndroid Build Coastguard Worker
155*58e6ee5fSAndroid Build Coastguard Worker enum process_type {
156*58e6ee5fSAndroid Build Coastguard Worker PROCESS_EVENT,
157*58e6ee5fSAndroid Build Coastguard Worker PROCESS_SYSTEM
158*58e6ee5fSAndroid Build Coastguard Worker };
159*58e6ee5fSAndroid Build Coastguard Worker
160*58e6ee5fSAndroid Build Coastguard Worker struct event_iter {
161*58e6ee5fSAndroid Build Coastguard Worker DIR *system_dir;
162*58e6ee5fSAndroid Build Coastguard Worker DIR *event_dir;
163*58e6ee5fSAndroid Build Coastguard Worker struct dirent *system_dent;
164*58e6ee5fSAndroid Build Coastguard Worker struct dirent *event_dent;
165*58e6ee5fSAndroid Build Coastguard Worker };
166*58e6ee5fSAndroid Build Coastguard Worker
167*58e6ee5fSAndroid Build Coastguard Worker enum event_iter_type {
168*58e6ee5fSAndroid Build Coastguard Worker EVENT_ITER_NONE,
169*58e6ee5fSAndroid Build Coastguard Worker EVENT_ITER_SYSTEM,
170*58e6ee5fSAndroid Build Coastguard Worker EVENT_ITER_EVENT
171*58e6ee5fSAndroid Build Coastguard Worker };
172*58e6ee5fSAndroid Build Coastguard Worker
173*58e6ee5fSAndroid Build Coastguard Worker struct event_iter *trace_event_iter_alloc(const char *path);
174*58e6ee5fSAndroid Build Coastguard Worker enum event_iter_type trace_event_iter_next(struct event_iter *iter,
175*58e6ee5fSAndroid Build Coastguard Worker const char *path, const char *system);
176*58e6ee5fSAndroid Build Coastguard Worker void trace_event_iter_free(struct event_iter *iter);
177*58e6ee5fSAndroid Build Coastguard Worker
178*58e6ee5fSAndroid Build Coastguard Worker char *append_file(const char *dir, const char *name);
179*58e6ee5fSAndroid Build Coastguard Worker char *get_file_content(const char *file);
180*58e6ee5fSAndroid Build Coastguard Worker
181*58e6ee5fSAndroid Build Coastguard Worker char *strstrip(char *str);
182*58e6ee5fSAndroid Build Coastguard Worker
183*58e6ee5fSAndroid Build Coastguard Worker /* --- instance manipulation --- */
184*58e6ee5fSAndroid Build Coastguard Worker
185*58e6ee5fSAndroid Build Coastguard Worker enum buffer_instance_flags {
186*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_KEEP = 1 << 0,
187*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_PROFILE = 1 << 1,
188*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_GUEST = 1 << 2,
189*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_AGENT = 1 << 3,
190*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_HAS_CLOCK = 1 << 4,
191*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_TSC2NSEC = 1 << 5,
192*58e6ee5fSAndroid Build Coastguard Worker BUFFER_FL_NETWORK = 1 << 6,
193*58e6ee5fSAndroid Build Coastguard Worker };
194*58e6ee5fSAndroid Build Coastguard Worker
195*58e6ee5fSAndroid Build Coastguard Worker struct func_list {
196*58e6ee5fSAndroid Build Coastguard Worker struct func_list *next;
197*58e6ee5fSAndroid Build Coastguard Worker const char *func;
198*58e6ee5fSAndroid Build Coastguard Worker const char *mod;
199*58e6ee5fSAndroid Build Coastguard Worker };
200*58e6ee5fSAndroid Build Coastguard Worker
201*58e6ee5fSAndroid Build Coastguard Worker struct pid_addr_maps {
202*58e6ee5fSAndroid Build Coastguard Worker struct pid_addr_maps *next;
203*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_proc_addr_map *lib_maps;
204*58e6ee5fSAndroid Build Coastguard Worker unsigned int nr_lib_maps;
205*58e6ee5fSAndroid Build Coastguard Worker char *proc_name;
206*58e6ee5fSAndroid Build Coastguard Worker int pid;
207*58e6ee5fSAndroid Build Coastguard Worker };
208*58e6ee5fSAndroid Build Coastguard Worker
209*58e6ee5fSAndroid Build Coastguard Worker struct opt_list {
210*58e6ee5fSAndroid Build Coastguard Worker struct opt_list *next;
211*58e6ee5fSAndroid Build Coastguard Worker const char *option;
212*58e6ee5fSAndroid Build Coastguard Worker };
213*58e6ee5fSAndroid Build Coastguard Worker
214*58e6ee5fSAndroid Build Coastguard Worker struct filter_pids {
215*58e6ee5fSAndroid Build Coastguard Worker struct filter_pids *next;
216*58e6ee5fSAndroid Build Coastguard Worker int pid;
217*58e6ee5fSAndroid Build Coastguard Worker int exclude;
218*58e6ee5fSAndroid Build Coastguard Worker };
219*58e6ee5fSAndroid Build Coastguard Worker
220*58e6ee5fSAndroid Build Coastguard Worker struct tsc_nsec {
221*58e6ee5fSAndroid Build Coastguard Worker int mult;
222*58e6ee5fSAndroid Build Coastguard Worker int shift;
223*58e6ee5fSAndroid Build Coastguard Worker unsigned long long offset;
224*58e6ee5fSAndroid Build Coastguard Worker };
225*58e6ee5fSAndroid Build Coastguard Worker
226*58e6ee5fSAndroid Build Coastguard Worker struct buffer_instance {
227*58e6ee5fSAndroid Build Coastguard Worker struct buffer_instance *next;
228*58e6ee5fSAndroid Build Coastguard Worker char *name;
229*58e6ee5fSAndroid Build Coastguard Worker struct tracefs_instance *tracefs;
230*58e6ee5fSAndroid Build Coastguard Worker unsigned long long trace_id;
231*58e6ee5fSAndroid Build Coastguard Worker char *cpumask;
232*58e6ee5fSAndroid Build Coastguard Worker char *output_file;
233*58e6ee5fSAndroid Build Coastguard Worker struct event_list *events;
234*58e6ee5fSAndroid Build Coastguard Worker struct event_list **event_next;
235*58e6ee5fSAndroid Build Coastguard Worker bool delete;
236*58e6ee5fSAndroid Build Coastguard Worker
237*58e6ee5fSAndroid Build Coastguard Worker struct event_list *sched_switch_event;
238*58e6ee5fSAndroid Build Coastguard Worker struct event_list *sched_wakeup_event;
239*58e6ee5fSAndroid Build Coastguard Worker struct event_list *sched_wakeup_new_event;
240*58e6ee5fSAndroid Build Coastguard Worker
241*58e6ee5fSAndroid Build Coastguard Worker const char *plugin;
242*58e6ee5fSAndroid Build Coastguard Worker char *filter_mod;
243*58e6ee5fSAndroid Build Coastguard Worker struct func_list *filter_funcs;
244*58e6ee5fSAndroid Build Coastguard Worker struct func_list *notrace_funcs;
245*58e6ee5fSAndroid Build Coastguard Worker
246*58e6ee5fSAndroid Build Coastguard Worker struct opt_list *options;
247*58e6ee5fSAndroid Build Coastguard Worker struct filter_pids *filter_pids;
248*58e6ee5fSAndroid Build Coastguard Worker struct filter_pids *process_pids;
249*58e6ee5fSAndroid Build Coastguard Worker char *common_pid_filter;
250*58e6ee5fSAndroid Build Coastguard Worker int nr_filter_pids;
251*58e6ee5fSAndroid Build Coastguard Worker int len_filter_pids;
252*58e6ee5fSAndroid Build Coastguard Worker int nr_process_pids;
253*58e6ee5fSAndroid Build Coastguard Worker bool ptrace_child;
254*58e6ee5fSAndroid Build Coastguard Worker
255*58e6ee5fSAndroid Build Coastguard Worker int have_set_event_pid;
256*58e6ee5fSAndroid Build Coastguard Worker int have_event_fork;
257*58e6ee5fSAndroid Build Coastguard Worker int have_func_fork;
258*58e6ee5fSAndroid Build Coastguard Worker int get_procmap;
259*58e6ee5fSAndroid Build Coastguard Worker
260*58e6ee5fSAndroid Build Coastguard Worker const char *clock;
261*58e6ee5fSAndroid Build Coastguard Worker unsigned int *client_ports;
262*58e6ee5fSAndroid Build Coastguard Worker
263*58e6ee5fSAndroid Build Coastguard Worker struct trace_seq *s_save;
264*58e6ee5fSAndroid Build Coastguard Worker struct trace_seq *s_print;
265*58e6ee5fSAndroid Build Coastguard Worker
266*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_input *handle;
267*58e6ee5fSAndroid Build Coastguard Worker
268*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_msg_handle *msg_handle;
269*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_output *network_handle;
270*58e6ee5fSAndroid Build Coastguard Worker const char *host;
271*58e6ee5fSAndroid Build Coastguard Worker
272*58e6ee5fSAndroid Build Coastguard Worker struct pid_addr_maps *pid_maps;
273*58e6ee5fSAndroid Build Coastguard Worker
274*58e6ee5fSAndroid Build Coastguard Worker char *max_graph_depth;
275*58e6ee5fSAndroid Build Coastguard Worker
276*58e6ee5fSAndroid Build Coastguard Worker int flags;
277*58e6ee5fSAndroid Build Coastguard Worker int tracing_on_init_val;
278*58e6ee5fSAndroid Build Coastguard Worker int tracing_on_fd;
279*58e6ee5fSAndroid Build Coastguard Worker int buffer_size;
280*58e6ee5fSAndroid Build Coastguard Worker int cpu_count;
281*58e6ee5fSAndroid Build Coastguard Worker
282*58e6ee5fSAndroid Build Coastguard Worker int argc;
283*58e6ee5fSAndroid Build Coastguard Worker char **argv;
284*58e6ee5fSAndroid Build Coastguard Worker
285*58e6ee5fSAndroid Build Coastguard Worker struct addrinfo *result;
286*58e6ee5fSAndroid Build Coastguard Worker unsigned int cid;
287*58e6ee5fSAndroid Build Coastguard Worker unsigned int port;
288*58e6ee5fSAndroid Build Coastguard Worker int *fds;
289*58e6ee5fSAndroid Build Coastguard Worker bool use_fifos;
290*58e6ee5fSAndroid Build Coastguard Worker
291*58e6ee5fSAndroid Build Coastguard Worker enum port_type port_type; /* Default to USE_UDP (zero) */
292*58e6ee5fSAndroid Build Coastguard Worker int tsync_loop_interval;
293*58e6ee5fSAndroid Build Coastguard Worker struct tracecmd_time_sync *tsync;
294*58e6ee5fSAndroid Build Coastguard Worker };
295*58e6ee5fSAndroid Build Coastguard Worker
296*58e6ee5fSAndroid Build Coastguard Worker void init_top_instance(void);
297*58e6ee5fSAndroid Build Coastguard Worker
298*58e6ee5fSAndroid Build Coastguard Worker extern struct buffer_instance top_instance;
299*58e6ee5fSAndroid Build Coastguard Worker extern struct buffer_instance *buffer_instances;
300*58e6ee5fSAndroid Build Coastguard Worker extern struct buffer_instance *first_instance;
301*58e6ee5fSAndroid Build Coastguard Worker
302*58e6ee5fSAndroid Build Coastguard Worker #define for_each_instance(i) for (i = buffer_instances; i; i = (i)->next)
303*58e6ee5fSAndroid Build Coastguard Worker #define for_all_instances(i) for (i = first_instance; i; \
304*58e6ee5fSAndroid Build Coastguard Worker i = i == &top_instance ? buffer_instances : (i)->next)
305*58e6ee5fSAndroid Build Coastguard Worker
306*58e6ee5fSAndroid Build Coastguard Worker #define is_agent(instance) ((instance)->flags & BUFFER_FL_AGENT)
307*58e6ee5fSAndroid Build Coastguard Worker #define is_guest(instance) ((instance)->flags & BUFFER_FL_GUEST)
308*58e6ee5fSAndroid Build Coastguard Worker #define is_network(instance) ((instance)->flags & BUFFER_FL_NETWORK)
309*58e6ee5fSAndroid Build Coastguard Worker
310*58e6ee5fSAndroid Build Coastguard Worker #define START_PORT_SEARCH 1500
311*58e6ee5fSAndroid Build Coastguard Worker #define MAX_PORT_SEARCH 6000
312*58e6ee5fSAndroid Build Coastguard Worker
313*58e6ee5fSAndroid Build Coastguard Worker struct sockaddr_storage;
314*58e6ee5fSAndroid Build Coastguard Worker
315*58e6ee5fSAndroid Build Coastguard Worker int trace_net_make(int port, enum port_type type);
316*58e6ee5fSAndroid Build Coastguard Worker int trace_net_search(int start_port, int *sfd, enum port_type type);
317*58e6ee5fSAndroid Build Coastguard Worker int trace_net_print_connection(int fd);
318*58e6ee5fSAndroid Build Coastguard Worker bool trace_net_cmp_connection(struct sockaddr_storage *addr, const char *name);
319*58e6ee5fSAndroid Build Coastguard Worker bool trace_net_cmp_connection_fd(int fd, const char *name);
320*58e6ee5fSAndroid Build Coastguard Worker
321*58e6ee5fSAndroid Build Coastguard Worker struct buffer_instance *allocate_instance(const char *name);
322*58e6ee5fSAndroid Build Coastguard Worker void add_instance(struct buffer_instance *instance, int cpu_count);
323*58e6ee5fSAndroid Build Coastguard Worker void update_first_instance(struct buffer_instance *instance, int topt);
324*58e6ee5fSAndroid Build Coastguard Worker
325*58e6ee5fSAndroid Build Coastguard Worker void show_instance_file(struct buffer_instance *instance, const char *name);
326*58e6ee5fSAndroid Build Coastguard Worker void show_options(const char *prefix, struct buffer_instance *buffer);
327*58e6ee5fSAndroid Build Coastguard Worker
328*58e6ee5fSAndroid Build Coastguard Worker struct trace_guest {
329*58e6ee5fSAndroid Build Coastguard Worker struct tracefs_instance *instance;
330*58e6ee5fSAndroid Build Coastguard Worker char *name;
331*58e6ee5fSAndroid Build Coastguard Worker int cid;
332*58e6ee5fSAndroid Build Coastguard Worker int pid;
333*58e6ee5fSAndroid Build Coastguard Worker int cpu_max;
334*58e6ee5fSAndroid Build Coastguard Worker int *cpu_pid;
335*58e6ee5fSAndroid Build Coastguard Worker int *task_pids;
336*58e6ee5fSAndroid Build Coastguard Worker };
337*58e6ee5fSAndroid Build Coastguard Worker struct trace_guest *trace_get_guest(unsigned int cid, const char *name);
338*58e6ee5fSAndroid Build Coastguard Worker bool trace_have_guests_pid(void);
339*58e6ee5fSAndroid Build Coastguard Worker void read_qemu_guests(void);
340*58e6ee5fSAndroid Build Coastguard Worker int get_guest_pid(unsigned int guest_cid);
341*58e6ee5fSAndroid Build Coastguard Worker int get_guest_vcpu_pid(unsigned int guest_cid, unsigned int guest_vcpu);
342*58e6ee5fSAndroid Build Coastguard Worker
343*58e6ee5fSAndroid Build Coastguard Worker /* moved from trace-cmd.h */
344*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_remove_instances(void);
345*58e6ee5fSAndroid Build Coastguard Worker int tracecmd_add_event(const char *event_str, int stack);
346*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_enable_events(void);
347*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_disable_all_tracing(int disable_tracer);
348*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_disable_tracing(void);
349*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_enable_tracing(void);
350*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_stat_cpu(struct trace_seq *s, int cpu);
351*58e6ee5fSAndroid Build Coastguard Worker
352*58e6ee5fSAndroid Build Coastguard Worker int tracecmd_host_tsync(struct buffer_instance *instance,
353*58e6ee5fSAndroid Build Coastguard Worker unsigned int tsync_port);
354*58e6ee5fSAndroid Build Coastguard Worker void tracecmd_host_tsync_complete(struct buffer_instance *instance);
355*58e6ee5fSAndroid Build Coastguard Worker const char *tracecmd_guest_tsync(struct tracecmd_tsync_protos *tsync_protos,
356*58e6ee5fSAndroid Build Coastguard Worker char *clock, unsigned int *tsync_port,
357*58e6ee5fSAndroid Build Coastguard Worker pthread_t *thr_id);
358*58e6ee5fSAndroid Build Coastguard Worker
359*58e6ee5fSAndroid Build Coastguard Worker int trace_make_vsock(unsigned int port);
360*58e6ee5fSAndroid Build Coastguard Worker int trace_get_vsock_port(int sd, unsigned int *port);
361*58e6ee5fSAndroid Build Coastguard Worker int trace_open_vsock(unsigned int cid, unsigned int port);
362*58e6ee5fSAndroid Build Coastguard Worker
363*58e6ee5fSAndroid Build Coastguard Worker int get_local_cid(unsigned int *cid);
364*58e6ee5fSAndroid Build Coastguard Worker
365*58e6ee5fSAndroid Build Coastguard Worker char *trace_get_guest_file(const char *file, const char *guest);
366*58e6ee5fSAndroid Build Coastguard Worker
367*58e6ee5fSAndroid Build Coastguard Worker #ifdef VSOCK
368*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_open(unsigned int cid, unsigned int port);
369*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_make(unsigned int port);
370*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_make_any(void);
371*58e6ee5fSAndroid Build Coastguard Worker int get_vsocket_params(int fd, unsigned int *lcid, unsigned int *rcid);
372*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_get_port(int sd, unsigned int *port);
373*58e6ee5fSAndroid Build Coastguard Worker bool trace_vsock_can_splice_read(void);
374*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_local_cid(void);
375*58e6ee5fSAndroid Build Coastguard Worker int trace_vsock_print_connection(int fd);
376*58e6ee5fSAndroid Build Coastguard Worker #else
trace_vsock_open(unsigned int cid,unsigned int port)377*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_open(unsigned int cid, unsigned int port)
378*58e6ee5fSAndroid Build Coastguard Worker {
379*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
380*58e6ee5fSAndroid Build Coastguard Worker }
381*58e6ee5fSAndroid Build Coastguard Worker
trace_vsock_make(unsigned int port)382*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_make(unsigned int port)
383*58e6ee5fSAndroid Build Coastguard Worker {
384*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
385*58e6ee5fSAndroid Build Coastguard Worker
386*58e6ee5fSAndroid Build Coastguard Worker }
387*58e6ee5fSAndroid Build Coastguard Worker
trace_vsock_make_any(void)388*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_make_any(void)
389*58e6ee5fSAndroid Build Coastguard Worker {
390*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
391*58e6ee5fSAndroid Build Coastguard Worker
392*58e6ee5fSAndroid Build Coastguard Worker }
393*58e6ee5fSAndroid Build Coastguard Worker
get_vsocket_params(int fd,unsigned int * lcid,unsigned int * rcid)394*58e6ee5fSAndroid Build Coastguard Worker static inline int get_vsocket_params(int fd, unsigned int *lcid, unsigned int *rcid)
395*58e6ee5fSAndroid Build Coastguard Worker {
396*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
397*58e6ee5fSAndroid Build Coastguard Worker }
398*58e6ee5fSAndroid Build Coastguard Worker
trace_vsock_get_port(int sd,unsigned int * port)399*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_get_port(int sd, unsigned int *port)
400*58e6ee5fSAndroid Build Coastguard Worker {
401*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
402*58e6ee5fSAndroid Build Coastguard Worker }
403*58e6ee5fSAndroid Build Coastguard Worker
trace_vsock_can_splice_read(void)404*58e6ee5fSAndroid Build Coastguard Worker static inline bool trace_vsock_can_splice_read(void)
405*58e6ee5fSAndroid Build Coastguard Worker {
406*58e6ee5fSAndroid Build Coastguard Worker return false;
407*58e6ee5fSAndroid Build Coastguard Worker }
408*58e6ee5fSAndroid Build Coastguard Worker
trace_vsock_local_cid(void)409*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_local_cid(void)
410*58e6ee5fSAndroid Build Coastguard Worker {
411*58e6ee5fSAndroid Build Coastguard Worker return -ENOTSUP;
412*58e6ee5fSAndroid Build Coastguard Worker }
trace_vsock_print_connection(int fd)413*58e6ee5fSAndroid Build Coastguard Worker static inline int trace_vsock_print_connection(int fd)
414*58e6ee5fSAndroid Build Coastguard Worker {
415*58e6ee5fSAndroid Build Coastguard Worker return -1;
416*58e6ee5fSAndroid Build Coastguard Worker }
417*58e6ee5fSAndroid Build Coastguard Worker #endif /* VSOCK */
418*58e6ee5fSAndroid Build Coastguard Worker
419*58e6ee5fSAndroid Build Coastguard Worker /* No longer in event-utils.h */
420*58e6ee5fSAndroid Build Coastguard Worker __printf(1,2)
421*58e6ee5fSAndroid Build Coastguard Worker void __noreturn die(const char *fmt, ...); /* Can be overriden */
422*58e6ee5fSAndroid Build Coastguard Worker void *malloc_or_die(unsigned int size); /* Can be overridden */
423*58e6ee5fSAndroid Build Coastguard Worker __printf(1,2)
424*58e6ee5fSAndroid Build Coastguard Worker void __noreturn __die(const char *fmt, ...);
425*58e6ee5fSAndroid Build Coastguard Worker void __noreturn _vdie(const char *fmt, va_list ap);
426*58e6ee5fSAndroid Build Coastguard Worker
is_digits(const char * s)427*58e6ee5fSAndroid Build Coastguard Worker static inline bool is_digits(const char *s)
428*58e6ee5fSAndroid Build Coastguard Worker {
429*58e6ee5fSAndroid Build Coastguard Worker for (; *s; s++)
430*58e6ee5fSAndroid Build Coastguard Worker if (!isdigit(*s))
431*58e6ee5fSAndroid Build Coastguard Worker return false;
432*58e6ee5fSAndroid Build Coastguard Worker return true;
433*58e6ee5fSAndroid Build Coastguard Worker }
434*58e6ee5fSAndroid Build Coastguard Worker
435*58e6ee5fSAndroid Build Coastguard Worker bool trace_tsc2nsec_is_supported(void);
436*58e6ee5fSAndroid Build Coastguard Worker
437*58e6ee5fSAndroid Build Coastguard Worker #endif /* __TRACE_LOCAL_H */
438