xref: /linux/drivers/android/binder/rust_binder_events.h (revision 7a5f1cd22d47f8ca4b760b6334378ae42c1bd24b)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2025 Google, Inc.
4  */
5 
6 #undef TRACE_SYSTEM
7 #undef TRACE_INCLUDE_FILE
8 #undef TRACE_INCLUDE_PATH
9 #define TRACE_SYSTEM rust_binder
10 #define TRACE_INCLUDE_FILE rust_binder_events
11 #define TRACE_INCLUDE_PATH ../drivers/android/binder
12 
13 #if !defined(_RUST_BINDER_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _RUST_BINDER_TRACE_H
15 
16 #include <linux/tracepoint.h>
17 
18 TRACE_EVENT(binder_ioctl,
19 	TP_PROTO(unsigned int cmd, unsigned long arg),
20 	TP_ARGS(cmd, arg),
21 
22 	TP_STRUCT__entry(
23 		__field(unsigned int, cmd)
24 		__field(unsigned long, arg)
25 	),
26 	TP_fast_assign(
27 		__entry->cmd = cmd;
28 		__entry->arg = arg;
29 	),
30 	TP_printk("cmd=0x%x arg=0x%lx", __entry->cmd, __entry->arg)
31 );
32 
33 DECLARE_EVENT_CLASS(binder_function_return_class,
34 	TP_PROTO(int ret),
35 	TP_ARGS(ret),
36 	TP_STRUCT__entry(
37 		__field(int, ret)
38 	),
39 	TP_fast_assign(
40 		__entry->ret = ret;
41 	),
42 	TP_printk("ret=%d", __entry->ret)
43 );
44 
45 #define DEFINE_RBINDER_FUNCTION_RETURN_EVENT(name)	\
46 DEFINE_EVENT(binder_function_return_class, name,	\
47 	TP_PROTO(int ret), \
48 	TP_ARGS(ret))
49 
50 DEFINE_RBINDER_FUNCTION_RETURN_EVENT(binder_ioctl_done);
51 DEFINE_RBINDER_FUNCTION_RETURN_EVENT(binder_read_done);
52 DEFINE_RBINDER_FUNCTION_RETURN_EVENT(binder_write_done);
53 
54 TRACE_EVENT(binder_wait_for_work,
55 	TP_PROTO(bool proc_work, bool transaction_stack, bool thread_todo),
56 	TP_ARGS(proc_work, transaction_stack, thread_todo),
57 	TP_STRUCT__entry(
58 		__field(bool, proc_work)
59 		__field(bool, transaction_stack)
60 		__field(bool, thread_todo)
61 	),
62 	TP_fast_assign(
63 		__entry->proc_work = proc_work;
64 		__entry->transaction_stack = transaction_stack;
65 		__entry->thread_todo = thread_todo;
66 	),
67 	TP_printk("proc_work=%d transaction_stack=%d thread_todo=%d",
68 		  __entry->proc_work, __entry->transaction_stack,
69 		  __entry->thread_todo)
70 );
71 
72 TRACE_EVENT(binder_transaction,
73 	TP_PROTO(bool reply, rust_binder_transaction t, struct task_struct *thread),
74 	TP_ARGS(reply, t, thread),
75 	TP_STRUCT__entry(
76 		__field(int, debug_id)
77 		__field(int, target_node)
78 		__field(int, to_proc)
79 		__field(int, to_thread)
80 		__field(int, reply)
81 		__field(unsigned int, code)
82 		__field(unsigned int, flags)
83 	),
84 	TP_fast_assign(
85 		rust_binder_process to = rust_binder_transaction_to_proc(t);
86 		rust_binder_node target_node = rust_binder_transaction_target_node(t);
87 
88 		__entry->debug_id = rust_binder_transaction_debug_id(t);
89 		__entry->target_node = target_node ? rust_binder_node_debug_id(target_node) : 0;
90 		__entry->to_proc = rust_binder_process_task(to)->pid;
91 		__entry->to_thread = thread ? thread->pid : 0;
92 		__entry->reply = reply;
93 		__entry->code = rust_binder_transaction_code(t);
94 		__entry->flags = rust_binder_transaction_flags(t);
95 	),
96 	TP_printk("transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x",
97 		  __entry->debug_id, __entry->target_node,
98 		  __entry->to_proc, __entry->to_thread,
99 		  __entry->reply, __entry->flags, __entry->code)
100 );
101 
102 TRACE_EVENT(binder_transaction_received,
103 	TP_PROTO(rust_binder_transaction t),
104 	TP_ARGS(t),
105 	TP_STRUCT__entry(
106 		__field(int, debug_id)
107 	),
108 	TP_fast_assign(
109 		__entry->debug_id = rust_binder_transaction_debug_id(t);
110 	),
111 	TP_printk("transaction=%d", __entry->debug_id)
112 );
113 
114 TRACE_EVENT(binder_transaction_fd_send,
115 	TP_PROTO(int t_debug_id, int fd, size_t offset),
116 	TP_ARGS(t_debug_id, fd, offset),
117 	TP_STRUCT__entry(
118 		__field(int, debug_id)
119 		__field(int, fd)
120 		__field(size_t, offset)
121 	),
122 	TP_fast_assign(
123 		__entry->debug_id = t_debug_id;
124 		__entry->fd = fd;
125 		__entry->offset = offset;
126 	),
127 	TP_printk("transaction=%d src_fd=%d offset=%zu",
128 		  __entry->debug_id, __entry->fd, __entry->offset)
129 );
130 
131 TRACE_EVENT(binder_transaction_fd_recv,
132 	TP_PROTO(int t_debug_id, int fd, size_t offset),
133 	TP_ARGS(t_debug_id, fd, offset),
134 	TP_STRUCT__entry(
135 		__field(int, debug_id)
136 		__field(int, fd)
137 		__field(size_t, offset)
138 	),
139 	TP_fast_assign(
140 		__entry->debug_id = t_debug_id;
141 		__entry->fd = fd;
142 		__entry->offset = offset;
143 	),
144 	TP_printk("transaction=%d dest_fd=%d offset=%zu",
145 		  __entry->debug_id, __entry->fd, __entry->offset)
146 );
147 
148 TRACE_EVENT(binder_command,
149 	TP_PROTO(uint32_t cmd),
150 	TP_ARGS(cmd),
151 	TP_STRUCT__entry(
152 		__field(uint32_t, cmd)
153 	),
154 	TP_fast_assign(
155 		__entry->cmd = cmd;
156 	),
157 	TP_printk("cmd=0x%x %s",
158 		  __entry->cmd,
159 		  _IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_command_strings) ?
160 			  binder_command_strings[_IOC_NR(__entry->cmd)] :
161 			  "unknown")
162 );
163 
164 TRACE_EVENT(binder_return,
165 	TP_PROTO(uint32_t cmd),
166 	TP_ARGS(cmd),
167 	TP_STRUCT__entry(
168 		__field(uint32_t, cmd)
169 	),
170 	TP_fast_assign(
171 		__entry->cmd = cmd;
172 	),
173 	TP_printk("cmd=0x%x %s",
174 		  __entry->cmd,
175 		  _IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_return_strings) ?
176 			  binder_return_strings[_IOC_NR(__entry->cmd)] :
177 			  "unknown")
178 );
179 
180 #endif /* _RUST_BINDER_TRACE_H */
181 
182 /* This part must be outside protection */
183 #include <trace/define_trace.h>
184