2019-05-29 17:17:56 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2012-10-17 02:29:53 +04:00
/*
* Copyright ( C ) 2012 Google , Inc .
*/
# undef TRACE_SYSTEM
# define TRACE_SYSTEM binder
# if !defined(_BINDER_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
# define _BINDER_TRACE_H
# include <linux/tracepoint.h>
struct binder_buffer ;
struct binder_node ;
struct binder_proc ;
2017-06-29 22:01:40 +03:00
struct binder_alloc ;
2017-06-29 22:01:58 +03:00
struct binder_ref_data ;
2012-10-17 02:29:53 +04:00
struct binder_thread ;
struct binder_transaction ;
TRACE_EVENT ( binder_ioctl ,
TP_PROTO ( unsigned int cmd , unsigned long arg ) ,
TP_ARGS ( cmd , arg ) ,
TP_STRUCT__entry (
__field ( unsigned int , cmd )
__field ( unsigned long , arg )
) ,
TP_fast_assign (
__entry - > cmd = cmd ;
__entry - > arg = arg ;
) ,
TP_printk ( " cmd=0x%x arg=0x%lx " , __entry - > cmd , __entry - > arg )
) ;
DECLARE_EVENT_CLASS ( binder_lock_class ,
TP_PROTO ( const char * tag ) ,
TP_ARGS ( tag ) ,
TP_STRUCT__entry (
__field ( const char * , tag )
) ,
TP_fast_assign (
__entry - > tag = tag ;
) ,
TP_printk ( " tag=%s " , __entry - > tag )
) ;
# define DEFINE_BINDER_LOCK_EVENT(name) \
DEFINE_EVENT ( binder_lock_class , name , \
TP_PROTO ( const char * func ) , \
TP_ARGS ( func ) )
DEFINE_BINDER_LOCK_EVENT ( binder_lock ) ;
DEFINE_BINDER_LOCK_EVENT ( binder_locked ) ;
DEFINE_BINDER_LOCK_EVENT ( binder_unlock ) ;
DECLARE_EVENT_CLASS ( binder_function_return_class ,
TP_PROTO ( int ret ) ,
TP_ARGS ( ret ) ,
TP_STRUCT__entry (
__field ( int , ret )
) ,
TP_fast_assign (
__entry - > ret = ret ;
) ,
TP_printk ( " ret=%d " , __entry - > ret )
) ;
# define DEFINE_BINDER_FUNCTION_RETURN_EVENT(name) \
DEFINE_EVENT ( binder_function_return_class , name , \
TP_PROTO ( int ret ) , \
TP_ARGS ( ret ) )
DEFINE_BINDER_FUNCTION_RETURN_EVENT ( binder_ioctl_done ) ;
DEFINE_BINDER_FUNCTION_RETURN_EVENT ( binder_write_done ) ;
DEFINE_BINDER_FUNCTION_RETURN_EVENT ( binder_read_done ) ;
TRACE_EVENT ( binder_wait_for_work ,
TP_PROTO ( bool proc_work , bool transaction_stack , bool thread_todo ) ,
TP_ARGS ( proc_work , transaction_stack , thread_todo ) ,
TP_STRUCT__entry (
__field ( bool , proc_work )
__field ( bool , transaction_stack )
__field ( bool , thread_todo )
) ,
TP_fast_assign (
__entry - > proc_work = proc_work ;
__entry - > transaction_stack = transaction_stack ;
__entry - > thread_todo = thread_todo ;
) ,
TP_printk ( " proc_work=%d transaction_stack=%d thread_todo=%d " ,
__entry - > proc_work , __entry - > transaction_stack ,
__entry - > thread_todo )
) ;
TRACE_EVENT ( binder_transaction ,
TP_PROTO ( bool reply , struct binder_transaction * t ,
struct binder_node * target_node ) ,
TP_ARGS ( reply , t , target_node ) ,
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( int , target_node )
__field ( int , to_proc )
__field ( int , to_thread )
__field ( int , reply )
__field ( unsigned int , code )
__field ( unsigned int , flags )
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
__entry - > target_node = target_node ? target_node - > debug_id : 0 ;
__entry - > to_proc = t - > to_proc - > pid ;
__entry - > to_thread = t - > to_thread ? t - > to_thread - > pid : 0 ;
__entry - > reply = reply ;
__entry - > code = t - > code ;
__entry - > flags = t - > flags ;
) ,
TP_printk ( " transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x " ,
__entry - > debug_id , __entry - > target_node ,
__entry - > to_proc , __entry - > to_thread ,
__entry - > reply , __entry - > flags , __entry - > code )
) ;
TRACE_EVENT ( binder_transaction_received ,
TP_PROTO ( struct binder_transaction * t ) ,
TP_ARGS ( t ) ,
TP_STRUCT__entry (
__field ( int , debug_id )
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
) ,
TP_printk ( " transaction=%d " , __entry - > debug_id )
) ;
TRACE_EVENT ( binder_transaction_node_to_ref ,
TP_PROTO ( struct binder_transaction * t , struct binder_node * node ,
2017-06-29 22:01:58 +03:00
struct binder_ref_data * rdata ) ,
TP_ARGS ( t , node , rdata ) ,
2012-10-17 02:29:53 +04:00
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( int , node_debug_id )
2014-02-22 02:40:26 +04:00
__field ( binder_uintptr_t , node_ptr )
2012-10-17 02:29:53 +04:00
__field ( int , ref_debug_id )
__field ( uint32_t , ref_desc )
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
__entry - > node_debug_id = node - > debug_id ;
__entry - > node_ptr = node - > ptr ;
2017-06-29 22:01:58 +03:00
__entry - > ref_debug_id = rdata - > debug_id ;
__entry - > ref_desc = rdata - > desc ;
2012-10-17 02:29:53 +04:00
) ,
2014-02-22 02:40:26 +04:00
TP_printk ( " transaction=%d node=%d src_ptr=0x%016llx ==> dest_ref=%d dest_desc=%d " ,
__entry - > debug_id , __entry - > node_debug_id ,
( u64 ) __entry - > node_ptr ,
2012-10-17 02:29:53 +04:00
__entry - > ref_debug_id , __entry - > ref_desc )
) ;
TRACE_EVENT ( binder_transaction_ref_to_node ,
2017-06-29 22:01:58 +03:00
TP_PROTO ( struct binder_transaction * t , struct binder_node * node ,
struct binder_ref_data * rdata ) ,
TP_ARGS ( t , node , rdata ) ,
2012-10-17 02:29:53 +04:00
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( int , ref_debug_id )
__field ( uint32_t , ref_desc )
__field ( int , node_debug_id )
2014-02-22 02:40:26 +04:00
__field ( binder_uintptr_t , node_ptr )
2012-10-17 02:29:53 +04:00
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
2017-06-29 22:01:58 +03:00
__entry - > ref_debug_id = rdata - > debug_id ;
__entry - > ref_desc = rdata - > desc ;
__entry - > node_debug_id = node - > debug_id ;
__entry - > node_ptr = node - > ptr ;
2012-10-17 02:29:53 +04:00
) ,
2014-02-22 02:40:26 +04:00
TP_printk ( " transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ptr=0x%016llx " ,
2012-10-17 02:29:53 +04:00
__entry - > debug_id , __entry - > node_debug_id ,
2014-02-22 02:40:26 +04:00
__entry - > ref_debug_id , __entry - > ref_desc ,
( u64 ) __entry - > node_ptr )
2012-10-17 02:29:53 +04:00
) ;
TRACE_EVENT ( binder_transaction_ref_to_ref ,
2017-06-29 22:01:58 +03:00
TP_PROTO ( struct binder_transaction * t , struct binder_node * node ,
struct binder_ref_data * src_ref ,
struct binder_ref_data * dest_ref ) ,
TP_ARGS ( t , node , src_ref , dest_ref ) ,
2012-10-17 02:29:53 +04:00
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( int , node_debug_id )
__field ( int , src_ref_debug_id )
__field ( uint32_t , src_ref_desc )
__field ( int , dest_ref_debug_id )
__field ( uint32_t , dest_ref_desc )
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
2017-06-29 22:01:58 +03:00
__entry - > node_debug_id = node - > debug_id ;
2012-10-17 02:29:53 +04:00
__entry - > src_ref_debug_id = src_ref - > debug_id ;
__entry - > src_ref_desc = src_ref - > desc ;
__entry - > dest_ref_debug_id = dest_ref - > debug_id ;
__entry - > dest_ref_desc = dest_ref - > desc ;
) ,
TP_printk ( " transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ref=%d dest_desc=%d " ,
__entry - > debug_id , __entry - > node_debug_id ,
__entry - > src_ref_debug_id , __entry - > src_ref_desc ,
__entry - > dest_ref_debug_id , __entry - > dest_ref_desc )
) ;
2018-08-28 23:46:25 +03:00
TRACE_EVENT ( binder_transaction_fd_send ,
TP_PROTO ( struct binder_transaction * t , int fd , size_t offset ) ,
TP_ARGS ( t , fd , offset ) ,
2012-10-17 02:29:53 +04:00
TP_STRUCT__entry (
__field ( int , debug_id )
2018-08-28 23:46:25 +03:00
__field ( int , fd )
__field ( size_t , offset )
2012-10-17 02:29:53 +04:00
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
2018-08-28 23:46:25 +03:00
__entry - > fd = fd ;
__entry - > offset = offset ;
2012-10-17 02:29:53 +04:00
) ,
2018-08-28 23:46:25 +03:00
TP_printk ( " transaction=%d src_fd=%d offset=%zu " ,
__entry - > debug_id , __entry - > fd , __entry - > offset )
) ;
TRACE_EVENT ( binder_transaction_fd_recv ,
TP_PROTO ( struct binder_transaction * t , int fd , size_t offset ) ,
TP_ARGS ( t , fd , offset ) ,
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( int , fd )
__field ( size_t , offset )
) ,
TP_fast_assign (
__entry - > debug_id = t - > debug_id ;
__entry - > fd = fd ;
__entry - > offset = offset ;
) ,
TP_printk ( " transaction=%d dest_fd=%d offset=%zu " ,
__entry - > debug_id , __entry - > fd , __entry - > offset )
2012-10-17 02:29:53 +04:00
) ;
DECLARE_EVENT_CLASS ( binder_buffer_class ,
TP_PROTO ( struct binder_buffer * buf ) ,
TP_ARGS ( buf ) ,
TP_STRUCT__entry (
__field ( int , debug_id )
__field ( size_t , data_size )
__field ( size_t , offsets_size )
2018-07-27 03:17:17 +03:00
__field ( size_t , extra_buffers_size )
2012-10-17 02:29:53 +04:00
) ,
TP_fast_assign (
__entry - > debug_id = buf - > debug_id ;
__entry - > data_size = buf - > data_size ;
__entry - > offsets_size = buf - > offsets_size ;
2018-07-27 03:17:17 +03:00
__entry - > extra_buffers_size = buf - > extra_buffers_size ;
2012-10-17 02:29:53 +04:00
) ,
2018-07-27 03:17:17 +03:00
TP_printk ( " transaction=%d data_size=%zd offsets_size=%zd extra_buffers_size=%zd " ,
__entry - > debug_id , __entry - > data_size , __entry - > offsets_size ,
__entry - > extra_buffers_size )
2012-10-17 02:29:53 +04:00
) ;
DEFINE_EVENT ( binder_buffer_class , binder_transaction_alloc_buf ,
TP_PROTO ( struct binder_buffer * buffer ) ,
TP_ARGS ( buffer ) ) ;
DEFINE_EVENT ( binder_buffer_class , binder_transaction_buffer_release ,
TP_PROTO ( struct binder_buffer * buffer ) ,
TP_ARGS ( buffer ) ) ;
DEFINE_EVENT ( binder_buffer_class , binder_transaction_failed_buffer_release ,
TP_PROTO ( struct binder_buffer * buffer ) ,
TP_ARGS ( buffer ) ) ;
TRACE_EVENT ( binder_update_page_range ,
2017-06-29 22:01:40 +03:00
TP_PROTO ( struct binder_alloc * alloc , bool allocate ,
2019-02-08 21:35:20 +03:00
void __user * start , void __user * end ) ,
2017-06-29 22:01:40 +03:00
TP_ARGS ( alloc , allocate , start , end ) ,
2012-10-17 02:29:53 +04:00
TP_STRUCT__entry (
__field ( int , proc )
__field ( bool , allocate )
__field ( size_t , offset )
__field ( size_t , size )
) ,
TP_fast_assign (
2017-06-29 22:01:40 +03:00
__entry - > proc = alloc - > pid ;
2012-10-17 02:29:53 +04:00
__entry - > allocate = allocate ;
2017-06-29 22:01:40 +03:00
__entry - > offset = start - alloc - > buffer ;
2012-10-17 02:29:53 +04:00
__entry - > size = end - start ;
) ,
TP_printk ( " proc=%d allocate=%d offset=%zu size=%zu " ,
__entry - > proc , __entry - > allocate ,
__entry - > offset , __entry - > size )
) ;
2017-08-23 18:46:43 +03:00
DECLARE_EVENT_CLASS ( binder_lru_page_class ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ,
TP_STRUCT__entry (
__field ( int , proc )
__field ( size_t , page_index )
) ,
TP_fast_assign (
__entry - > proc = alloc - > pid ;
__entry - > page_index = page_index ;
) ,
TP_printk ( " proc=%d page_index=%zu " ,
__entry - > proc , __entry - > page_index )
) ;
DEFINE_EVENT ( binder_lru_page_class , binder_alloc_lru_start ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_alloc_lru_end ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_free_lru_start ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_free_lru_end ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_alloc_page_start ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_alloc_page_end ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_unmap_user_start ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_unmap_user_end ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_unmap_kernel_start ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
DEFINE_EVENT ( binder_lru_page_class , binder_unmap_kernel_end ,
TP_PROTO ( const struct binder_alloc * alloc , size_t page_index ) ,
TP_ARGS ( alloc , page_index ) ) ;
2012-10-17 02:29:53 +04:00
TRACE_EVENT ( binder_command ,
TP_PROTO ( uint32_t cmd ) ,
TP_ARGS ( cmd ) ,
TP_STRUCT__entry (
__field ( uint32_t , cmd )
) ,
TP_fast_assign (
__entry - > cmd = cmd ;
) ,
TP_printk ( " cmd=0x%x %s " ,
__entry - > cmd ,
_IOC_NR ( __entry - > cmd ) < ARRAY_SIZE ( binder_command_strings ) ?
binder_command_strings [ _IOC_NR ( __entry - > cmd ) ] :
" unknown " )
) ;
TRACE_EVENT ( binder_return ,
TP_PROTO ( uint32_t cmd ) ,
TP_ARGS ( cmd ) ,
TP_STRUCT__entry (
__field ( uint32_t , cmd )
) ,
TP_fast_assign (
__entry - > cmd = cmd ;
) ,
TP_printk ( " cmd=0x%x %s " ,
__entry - > cmd ,
_IOC_NR ( __entry - > cmd ) < ARRAY_SIZE ( binder_return_strings ) ?
binder_return_strings [ _IOC_NR ( __entry - > cmd ) ] :
" unknown " )
) ;
# endif /* _BINDER_TRACE_H */
# undef TRACE_INCLUDE_PATH
# undef TRACE_INCLUDE_FILE
# define TRACE_INCLUDE_PATH .
# define TRACE_INCLUDE_FILE binder_trace
# include <trace/define_trace.h>