1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2012 Google, Inc. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #undef TRACE_SYSTEM 7*4882a593Smuzhiyun #define TRACE_SYSTEM binder 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #if !defined(_BINDER_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 10*4882a593Smuzhiyun #define _BINDER_TRACE_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/tracepoint.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun struct binder_buffer; 15*4882a593Smuzhiyun struct binder_node; 16*4882a593Smuzhiyun struct binder_proc; 17*4882a593Smuzhiyun struct binder_alloc; 18*4882a593Smuzhiyun struct binder_ref_data; 19*4882a593Smuzhiyun struct binder_thread; 20*4882a593Smuzhiyun struct binder_transaction; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun TRACE_EVENT(binder_ioctl, 23*4882a593Smuzhiyun TP_PROTO(unsigned int cmd, unsigned long arg), 24*4882a593Smuzhiyun TP_ARGS(cmd, arg), 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun TP_STRUCT__entry( 27*4882a593Smuzhiyun __field(unsigned int, cmd) 28*4882a593Smuzhiyun __field(unsigned long, arg) 29*4882a593Smuzhiyun ), 30*4882a593Smuzhiyun TP_fast_assign( 31*4882a593Smuzhiyun __entry->cmd = cmd; 32*4882a593Smuzhiyun __entry->arg = arg; 33*4882a593Smuzhiyun ), 34*4882a593Smuzhiyun TP_printk("cmd=0x%x arg=0x%lx", __entry->cmd, __entry->arg) 35*4882a593Smuzhiyun ); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun DECLARE_EVENT_CLASS(binder_lock_class, 38*4882a593Smuzhiyun TP_PROTO(const char *tag), 39*4882a593Smuzhiyun TP_ARGS(tag), 40*4882a593Smuzhiyun TP_STRUCT__entry( 41*4882a593Smuzhiyun __field(const char *, tag) 42*4882a593Smuzhiyun ), 43*4882a593Smuzhiyun TP_fast_assign( 44*4882a593Smuzhiyun __entry->tag = tag; 45*4882a593Smuzhiyun ), 46*4882a593Smuzhiyun TP_printk("tag=%s", __entry->tag) 47*4882a593Smuzhiyun ); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define DEFINE_BINDER_LOCK_EVENT(name) \ 50*4882a593Smuzhiyun DEFINE_EVENT(binder_lock_class, name, \ 51*4882a593Smuzhiyun TP_PROTO(const char *func), \ 52*4882a593Smuzhiyun TP_ARGS(func)) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun DEFINE_BINDER_LOCK_EVENT(binder_lock); 55*4882a593Smuzhiyun DEFINE_BINDER_LOCK_EVENT(binder_locked); 56*4882a593Smuzhiyun DEFINE_BINDER_LOCK_EVENT(binder_unlock); 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun DECLARE_EVENT_CLASS(binder_function_return_class, 59*4882a593Smuzhiyun TP_PROTO(int ret), 60*4882a593Smuzhiyun TP_ARGS(ret), 61*4882a593Smuzhiyun TP_STRUCT__entry( 62*4882a593Smuzhiyun __field(int, ret) 63*4882a593Smuzhiyun ), 64*4882a593Smuzhiyun TP_fast_assign( 65*4882a593Smuzhiyun __entry->ret = ret; 66*4882a593Smuzhiyun ), 67*4882a593Smuzhiyun TP_printk("ret=%d", __entry->ret) 68*4882a593Smuzhiyun ); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define DEFINE_BINDER_FUNCTION_RETURN_EVENT(name) \ 71*4882a593Smuzhiyun DEFINE_EVENT(binder_function_return_class, name, \ 72*4882a593Smuzhiyun TP_PROTO(int ret), \ 73*4882a593Smuzhiyun TP_ARGS(ret)) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_ioctl_done); 76*4882a593Smuzhiyun DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_write_done); 77*4882a593Smuzhiyun DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_read_done); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun TRACE_EVENT(binder_set_priority, 80*4882a593Smuzhiyun TP_PROTO(int proc, int thread, unsigned int old_prio, 81*4882a593Smuzhiyun unsigned int desired_prio, unsigned int new_prio), 82*4882a593Smuzhiyun TP_ARGS(proc, thread, old_prio, new_prio, desired_prio), 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun TP_STRUCT__entry( 85*4882a593Smuzhiyun __field(int, proc) 86*4882a593Smuzhiyun __field(int, thread) 87*4882a593Smuzhiyun __field(unsigned int, old_prio) 88*4882a593Smuzhiyun __field(unsigned int, new_prio) 89*4882a593Smuzhiyun __field(unsigned int, desired_prio) 90*4882a593Smuzhiyun ), 91*4882a593Smuzhiyun TP_fast_assign( 92*4882a593Smuzhiyun __entry->proc = proc; 93*4882a593Smuzhiyun __entry->thread = thread; 94*4882a593Smuzhiyun __entry->old_prio = old_prio; 95*4882a593Smuzhiyun __entry->new_prio = new_prio; 96*4882a593Smuzhiyun __entry->desired_prio = desired_prio; 97*4882a593Smuzhiyun ), 98*4882a593Smuzhiyun TP_printk("proc=%d thread=%d old=%d => new=%d desired=%d", 99*4882a593Smuzhiyun __entry->proc, __entry->thread, __entry->old_prio, 100*4882a593Smuzhiyun __entry->new_prio, __entry->desired_prio) 101*4882a593Smuzhiyun ); 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun TRACE_EVENT(binder_wait_for_work, 104*4882a593Smuzhiyun TP_PROTO(bool proc_work, bool transaction_stack, bool thread_todo), 105*4882a593Smuzhiyun TP_ARGS(proc_work, transaction_stack, thread_todo), 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun TP_STRUCT__entry( 108*4882a593Smuzhiyun __field(bool, proc_work) 109*4882a593Smuzhiyun __field(bool, transaction_stack) 110*4882a593Smuzhiyun __field(bool, thread_todo) 111*4882a593Smuzhiyun ), 112*4882a593Smuzhiyun TP_fast_assign( 113*4882a593Smuzhiyun __entry->proc_work = proc_work; 114*4882a593Smuzhiyun __entry->transaction_stack = transaction_stack; 115*4882a593Smuzhiyun __entry->thread_todo = thread_todo; 116*4882a593Smuzhiyun ), 117*4882a593Smuzhiyun TP_printk("proc_work=%d transaction_stack=%d thread_todo=%d", 118*4882a593Smuzhiyun __entry->proc_work, __entry->transaction_stack, 119*4882a593Smuzhiyun __entry->thread_todo) 120*4882a593Smuzhiyun ); 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun TRACE_EVENT(binder_transaction, 123*4882a593Smuzhiyun TP_PROTO(bool reply, struct binder_transaction *t, 124*4882a593Smuzhiyun struct binder_node *target_node), 125*4882a593Smuzhiyun TP_ARGS(reply, t, target_node), 126*4882a593Smuzhiyun TP_STRUCT__entry( 127*4882a593Smuzhiyun __field(int, debug_id) 128*4882a593Smuzhiyun __field(int, target_node) 129*4882a593Smuzhiyun __field(int, to_proc) 130*4882a593Smuzhiyun __field(int, to_thread) 131*4882a593Smuzhiyun __field(int, reply) 132*4882a593Smuzhiyun __field(unsigned int, code) 133*4882a593Smuzhiyun __field(unsigned int, flags) 134*4882a593Smuzhiyun ), 135*4882a593Smuzhiyun TP_fast_assign( 136*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 137*4882a593Smuzhiyun __entry->target_node = target_node ? target_node->debug_id : 0; 138*4882a593Smuzhiyun __entry->to_proc = t->to_proc->pid; 139*4882a593Smuzhiyun __entry->to_thread = t->to_thread ? t->to_thread->pid : 0; 140*4882a593Smuzhiyun __entry->reply = reply; 141*4882a593Smuzhiyun __entry->code = t->code; 142*4882a593Smuzhiyun __entry->flags = t->flags; 143*4882a593Smuzhiyun ), 144*4882a593Smuzhiyun TP_printk("transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x", 145*4882a593Smuzhiyun __entry->debug_id, __entry->target_node, 146*4882a593Smuzhiyun __entry->to_proc, __entry->to_thread, 147*4882a593Smuzhiyun __entry->reply, __entry->flags, __entry->code) 148*4882a593Smuzhiyun ); 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_received, 151*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t), 152*4882a593Smuzhiyun TP_ARGS(t), 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun TP_STRUCT__entry( 155*4882a593Smuzhiyun __field(int, debug_id) 156*4882a593Smuzhiyun ), 157*4882a593Smuzhiyun TP_fast_assign( 158*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 159*4882a593Smuzhiyun ), 160*4882a593Smuzhiyun TP_printk("transaction=%d", __entry->debug_id) 161*4882a593Smuzhiyun ); 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_node_to_ref, 164*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t, struct binder_node *node, 165*4882a593Smuzhiyun struct binder_ref_data *rdata), 166*4882a593Smuzhiyun TP_ARGS(t, node, rdata), 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun TP_STRUCT__entry( 169*4882a593Smuzhiyun __field(int, debug_id) 170*4882a593Smuzhiyun __field(int, node_debug_id) 171*4882a593Smuzhiyun __field(binder_uintptr_t, node_ptr) 172*4882a593Smuzhiyun __field(int, ref_debug_id) 173*4882a593Smuzhiyun __field(uint32_t, ref_desc) 174*4882a593Smuzhiyun ), 175*4882a593Smuzhiyun TP_fast_assign( 176*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 177*4882a593Smuzhiyun __entry->node_debug_id = node->debug_id; 178*4882a593Smuzhiyun __entry->node_ptr = node->ptr; 179*4882a593Smuzhiyun __entry->ref_debug_id = rdata->debug_id; 180*4882a593Smuzhiyun __entry->ref_desc = rdata->desc; 181*4882a593Smuzhiyun ), 182*4882a593Smuzhiyun TP_printk("transaction=%d node=%d src_ptr=0x%016llx ==> dest_ref=%d dest_desc=%d", 183*4882a593Smuzhiyun __entry->debug_id, __entry->node_debug_id, 184*4882a593Smuzhiyun (u64)__entry->node_ptr, 185*4882a593Smuzhiyun __entry->ref_debug_id, __entry->ref_desc) 186*4882a593Smuzhiyun ); 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_ref_to_node, 189*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t, struct binder_node *node, 190*4882a593Smuzhiyun struct binder_ref_data *rdata), 191*4882a593Smuzhiyun TP_ARGS(t, node, rdata), 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun TP_STRUCT__entry( 194*4882a593Smuzhiyun __field(int, debug_id) 195*4882a593Smuzhiyun __field(int, ref_debug_id) 196*4882a593Smuzhiyun __field(uint32_t, ref_desc) 197*4882a593Smuzhiyun __field(int, node_debug_id) 198*4882a593Smuzhiyun __field(binder_uintptr_t, node_ptr) 199*4882a593Smuzhiyun ), 200*4882a593Smuzhiyun TP_fast_assign( 201*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 202*4882a593Smuzhiyun __entry->ref_debug_id = rdata->debug_id; 203*4882a593Smuzhiyun __entry->ref_desc = rdata->desc; 204*4882a593Smuzhiyun __entry->node_debug_id = node->debug_id; 205*4882a593Smuzhiyun __entry->node_ptr = node->ptr; 206*4882a593Smuzhiyun ), 207*4882a593Smuzhiyun TP_printk("transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ptr=0x%016llx", 208*4882a593Smuzhiyun __entry->debug_id, __entry->node_debug_id, 209*4882a593Smuzhiyun __entry->ref_debug_id, __entry->ref_desc, 210*4882a593Smuzhiyun (u64)__entry->node_ptr) 211*4882a593Smuzhiyun ); 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_ref_to_ref, 214*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t, struct binder_node *node, 215*4882a593Smuzhiyun struct binder_ref_data *src_ref, 216*4882a593Smuzhiyun struct binder_ref_data *dest_ref), 217*4882a593Smuzhiyun TP_ARGS(t, node, src_ref, dest_ref), 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun TP_STRUCT__entry( 220*4882a593Smuzhiyun __field(int, debug_id) 221*4882a593Smuzhiyun __field(int, node_debug_id) 222*4882a593Smuzhiyun __field(int, src_ref_debug_id) 223*4882a593Smuzhiyun __field(uint32_t, src_ref_desc) 224*4882a593Smuzhiyun __field(int, dest_ref_debug_id) 225*4882a593Smuzhiyun __field(uint32_t, dest_ref_desc) 226*4882a593Smuzhiyun ), 227*4882a593Smuzhiyun TP_fast_assign( 228*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 229*4882a593Smuzhiyun __entry->node_debug_id = node->debug_id; 230*4882a593Smuzhiyun __entry->src_ref_debug_id = src_ref->debug_id; 231*4882a593Smuzhiyun __entry->src_ref_desc = src_ref->desc; 232*4882a593Smuzhiyun __entry->dest_ref_debug_id = dest_ref->debug_id; 233*4882a593Smuzhiyun __entry->dest_ref_desc = dest_ref->desc; 234*4882a593Smuzhiyun ), 235*4882a593Smuzhiyun TP_printk("transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ref=%d dest_desc=%d", 236*4882a593Smuzhiyun __entry->debug_id, __entry->node_debug_id, 237*4882a593Smuzhiyun __entry->src_ref_debug_id, __entry->src_ref_desc, 238*4882a593Smuzhiyun __entry->dest_ref_debug_id, __entry->dest_ref_desc) 239*4882a593Smuzhiyun ); 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_fd_send, 242*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t, int fd, size_t offset), 243*4882a593Smuzhiyun TP_ARGS(t, fd, offset), 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun TP_STRUCT__entry( 246*4882a593Smuzhiyun __field(int, debug_id) 247*4882a593Smuzhiyun __field(int, fd) 248*4882a593Smuzhiyun __field(size_t, offset) 249*4882a593Smuzhiyun ), 250*4882a593Smuzhiyun TP_fast_assign( 251*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 252*4882a593Smuzhiyun __entry->fd = fd; 253*4882a593Smuzhiyun __entry->offset = offset; 254*4882a593Smuzhiyun ), 255*4882a593Smuzhiyun TP_printk("transaction=%d src_fd=%d offset=%zu", 256*4882a593Smuzhiyun __entry->debug_id, __entry->fd, __entry->offset) 257*4882a593Smuzhiyun ); 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun TRACE_EVENT(binder_transaction_fd_recv, 260*4882a593Smuzhiyun TP_PROTO(struct binder_transaction *t, int fd, size_t offset), 261*4882a593Smuzhiyun TP_ARGS(t, fd, offset), 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun TP_STRUCT__entry( 264*4882a593Smuzhiyun __field(int, debug_id) 265*4882a593Smuzhiyun __field(int, fd) 266*4882a593Smuzhiyun __field(size_t, offset) 267*4882a593Smuzhiyun ), 268*4882a593Smuzhiyun TP_fast_assign( 269*4882a593Smuzhiyun __entry->debug_id = t->debug_id; 270*4882a593Smuzhiyun __entry->fd = fd; 271*4882a593Smuzhiyun __entry->offset = offset; 272*4882a593Smuzhiyun ), 273*4882a593Smuzhiyun TP_printk("transaction=%d dest_fd=%d offset=%zu", 274*4882a593Smuzhiyun __entry->debug_id, __entry->fd, __entry->offset) 275*4882a593Smuzhiyun ); 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun DECLARE_EVENT_CLASS(binder_buffer_class, 278*4882a593Smuzhiyun TP_PROTO(struct binder_buffer *buf), 279*4882a593Smuzhiyun TP_ARGS(buf), 280*4882a593Smuzhiyun TP_STRUCT__entry( 281*4882a593Smuzhiyun __field(int, debug_id) 282*4882a593Smuzhiyun __field(size_t, data_size) 283*4882a593Smuzhiyun __field(size_t, offsets_size) 284*4882a593Smuzhiyun __field(size_t, extra_buffers_size) 285*4882a593Smuzhiyun ), 286*4882a593Smuzhiyun TP_fast_assign( 287*4882a593Smuzhiyun __entry->debug_id = buf->debug_id; 288*4882a593Smuzhiyun __entry->data_size = buf->data_size; 289*4882a593Smuzhiyun __entry->offsets_size = buf->offsets_size; 290*4882a593Smuzhiyun __entry->extra_buffers_size = buf->extra_buffers_size; 291*4882a593Smuzhiyun ), 292*4882a593Smuzhiyun TP_printk("transaction=%d data_size=%zd offsets_size=%zd extra_buffers_size=%zd", 293*4882a593Smuzhiyun __entry->debug_id, __entry->data_size, __entry->offsets_size, 294*4882a593Smuzhiyun __entry->extra_buffers_size) 295*4882a593Smuzhiyun ); 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun DEFINE_EVENT(binder_buffer_class, binder_transaction_alloc_buf, 298*4882a593Smuzhiyun TP_PROTO(struct binder_buffer *buffer), 299*4882a593Smuzhiyun TP_ARGS(buffer)); 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun DEFINE_EVENT(binder_buffer_class, binder_transaction_buffer_release, 302*4882a593Smuzhiyun TP_PROTO(struct binder_buffer *buffer), 303*4882a593Smuzhiyun TP_ARGS(buffer)); 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun DEFINE_EVENT(binder_buffer_class, binder_transaction_failed_buffer_release, 306*4882a593Smuzhiyun TP_PROTO(struct binder_buffer *buffer), 307*4882a593Smuzhiyun TP_ARGS(buffer)); 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun DEFINE_EVENT(binder_buffer_class, binder_transaction_update_buffer_release, 310*4882a593Smuzhiyun TP_PROTO(struct binder_buffer *buffer), 311*4882a593Smuzhiyun TP_ARGS(buffer)); 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun TRACE_EVENT(binder_update_page_range, 314*4882a593Smuzhiyun TP_PROTO(struct binder_alloc *alloc, bool allocate, 315*4882a593Smuzhiyun void __user *start, void __user *end), 316*4882a593Smuzhiyun TP_ARGS(alloc, allocate, start, end), 317*4882a593Smuzhiyun TP_STRUCT__entry( 318*4882a593Smuzhiyun __field(int, proc) 319*4882a593Smuzhiyun __field(bool, allocate) 320*4882a593Smuzhiyun __field(size_t, offset) 321*4882a593Smuzhiyun __field(size_t, size) 322*4882a593Smuzhiyun ), 323*4882a593Smuzhiyun TP_fast_assign( 324*4882a593Smuzhiyun __entry->proc = alloc->pid; 325*4882a593Smuzhiyun __entry->allocate = allocate; 326*4882a593Smuzhiyun __entry->offset = start - alloc->buffer; 327*4882a593Smuzhiyun __entry->size = end - start; 328*4882a593Smuzhiyun ), 329*4882a593Smuzhiyun TP_printk("proc=%d allocate=%d offset=%zu size=%zu", 330*4882a593Smuzhiyun __entry->proc, __entry->allocate, 331*4882a593Smuzhiyun __entry->offset, __entry->size) 332*4882a593Smuzhiyun ); 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun DECLARE_EVENT_CLASS(binder_lru_page_class, 335*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 336*4882a593Smuzhiyun TP_ARGS(alloc, page_index), 337*4882a593Smuzhiyun TP_STRUCT__entry( 338*4882a593Smuzhiyun __field(int, proc) 339*4882a593Smuzhiyun __field(size_t, page_index) 340*4882a593Smuzhiyun ), 341*4882a593Smuzhiyun TP_fast_assign( 342*4882a593Smuzhiyun __entry->proc = alloc->pid; 343*4882a593Smuzhiyun __entry->page_index = page_index; 344*4882a593Smuzhiyun ), 345*4882a593Smuzhiyun TP_printk("proc=%d page_index=%zu", 346*4882a593Smuzhiyun __entry->proc, __entry->page_index) 347*4882a593Smuzhiyun ); 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_alloc_lru_start, 350*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 351*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_alloc_lru_end, 354*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 355*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_free_lru_start, 358*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 359*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_free_lru_end, 362*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 363*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_alloc_page_start, 366*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 367*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_alloc_page_end, 370*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 371*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_unmap_user_start, 374*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 375*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_unmap_user_end, 378*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 379*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_unmap_kernel_start, 382*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 383*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun DEFINE_EVENT(binder_lru_page_class, binder_unmap_kernel_end, 386*4882a593Smuzhiyun TP_PROTO(const struct binder_alloc *alloc, size_t page_index), 387*4882a593Smuzhiyun TP_ARGS(alloc, page_index)); 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun TRACE_EVENT(binder_command, 390*4882a593Smuzhiyun TP_PROTO(uint32_t cmd), 391*4882a593Smuzhiyun TP_ARGS(cmd), 392*4882a593Smuzhiyun TP_STRUCT__entry( 393*4882a593Smuzhiyun __field(uint32_t, cmd) 394*4882a593Smuzhiyun ), 395*4882a593Smuzhiyun TP_fast_assign( 396*4882a593Smuzhiyun __entry->cmd = cmd; 397*4882a593Smuzhiyun ), 398*4882a593Smuzhiyun TP_printk("cmd=0x%x %s", 399*4882a593Smuzhiyun __entry->cmd, 400*4882a593Smuzhiyun _IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_command_strings) ? 401*4882a593Smuzhiyun binder_command_strings[_IOC_NR(__entry->cmd)] : 402*4882a593Smuzhiyun "unknown") 403*4882a593Smuzhiyun ); 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun TRACE_EVENT(binder_return, 406*4882a593Smuzhiyun TP_PROTO(uint32_t cmd), 407*4882a593Smuzhiyun TP_ARGS(cmd), 408*4882a593Smuzhiyun TP_STRUCT__entry( 409*4882a593Smuzhiyun __field(uint32_t, cmd) 410*4882a593Smuzhiyun ), 411*4882a593Smuzhiyun TP_fast_assign( 412*4882a593Smuzhiyun __entry->cmd = cmd; 413*4882a593Smuzhiyun ), 414*4882a593Smuzhiyun TP_printk("cmd=0x%x %s", 415*4882a593Smuzhiyun __entry->cmd, 416*4882a593Smuzhiyun _IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_return_strings) ? 417*4882a593Smuzhiyun binder_return_strings[_IOC_NR(__entry->cmd)] : 418*4882a593Smuzhiyun "unknown") 419*4882a593Smuzhiyun ); 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun #endif /* _BINDER_TRACE_H */ 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 424*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 425*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 426*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE binder_trace 427*4882a593Smuzhiyun #include <trace/define_trace.h> 428