[go: up one dir, main page]

File: kernel.h

package info (click to toggle)
uftrace 0.13-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,212 kB
  • sloc: ansic: 53,313; python: 9,846; makefile: 838; asm: 703; cpp: 602; sh: 560; javascript: 191
file content (82 lines) | stat: -rw-r--r-- 2,365 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef UFTRACE_KERNEL_H
#define UFTRACE_KERNEL_H

#include "libtraceevent/event-parse.h"
#include "uftrace.h"
#include "utils/list.h"
#include "utils/utils.h"

#define KERNEL_NOP_TRACER "nop"
#define KERNEL_GRAPH_TRACER "function_graph"

struct uftrace_kernel_writer {
	int pid;
	int nr_cpus;
	int depth;
	unsigned long bufsize;
	char *tracer;
	int *traces;
	int *fds;
	char *output_dir;
	char *clock;
	struct list_head filters;
	struct list_head notrace;
	struct list_head patches;
	struct list_head nopatch;
	struct list_head events;
};

struct uftrace_kernel_reader {
	int nr_cpus;
	int last_read_cpu;
	bool skip_out;
	char *dirname;
	int *fds;
	int64_t *offsets;
	int64_t *sizes;
	size_t pagesize;
	void **mmaps;
	struct kbuffer **kbufs;
	struct pevent *pevent;
	struct uftrace_data *handle;
	struct uftrace_record *rstacks;
	struct uftrace_rstack_list *rstack_list;
	struct trace_seq trace_buf;
	struct uftrace_record trace_rec;
	bool *rstack_valid;
	bool *rstack_done;
	int *missed_events;
	int *tids;
};

/* these functions will be used at record time */
int setup_kernel_tracing(struct uftrace_kernel_writer *kernel, struct uftrace_opts *opts);
int start_kernel_tracing(struct uftrace_kernel_writer *kernel);
int record_kernel_tracing(struct uftrace_kernel_writer *kernel);
int record_kernel_trace_pipe(struct uftrace_kernel_writer *kernel, int cpu, int sock);
int stop_kernel_tracing(struct uftrace_kernel_writer *kernel);
int finish_kernel_tracing(struct uftrace_kernel_writer *kernel);
void list_kernel_events(void);

/* these functions will be used at replay time */
int setup_kernel_data(struct uftrace_kernel_reader *kernel);
int read_kernel_stack(struct uftrace_data *handle, struct uftrace_task_reader **taskp);
int read_kernel_cpu_data(struct uftrace_kernel_reader *kernel, int cpu);
void *read_kernel_event(struct uftrace_kernel_reader *kernel, int cpu, int *psize);
struct uftrace_record *get_kernel_record(struct uftrace_kernel_reader *kernel,
					 struct uftrace_task_reader *task, int cpu);
int finish_kernel_data(struct uftrace_kernel_reader *kernel);

static inline bool has_kernel_data(struct uftrace_kernel_reader *kernel)
{
	return kernel && kernel->pevent != NULL;
}

static inline bool has_kernel_event(char *events)
{
	return events && has_kernel_filter(events);
}

bool check_kernel_pid_filter(void);

#endif /* UFTRACE_KERNEL_H */