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