diff options
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/bpf_probe.h | 27 | ||||
| -rw-r--r-- | include/trace/events/afs.h | 385 | ||||
| -rw-r--r-- | include/trace/events/bpf_test_run.h | 50 | ||||
| -rw-r--r-- | include/trace/events/btrfs.h | 245 | ||||
| -rw-r--r-- | include/trace/events/cpuhp.h | 4 | ||||
| -rw-r--r-- | include/trace/events/devfreq.h | 40 | ||||
| -rw-r--r-- | include/trace/events/fib.h | 44 | ||||
| -rw-r--r-- | include/trace/events/fib6.h | 16 | ||||
| -rw-r--r-- | include/trace/events/mlxsw.h | 2 | ||||
| -rw-r--r-- | include/trace/events/nbd.h | 107 | ||||
| -rw-r--r-- | include/trace/events/net.h | 23 | ||||
| -rw-r--r-- | include/trace/events/preemptirq.h | 2 | ||||
| -rw-r--r-- | include/trace/events/random.h | 13 | ||||
| -rw-r--r-- | include/trace/events/rcu.h | 4 | ||||
| -rw-r--r-- | include/trace/events/spi.h | 10 | ||||
| -rw-r--r-- | include/trace/events/sunrpc.h | 2 | ||||
| -rw-r--r-- | include/trace/events/syscalls.h | 2 | ||||
| -rw-r--r-- | include/trace/events/timer.h | 17 | ||||
| -rw-r--r-- | include/trace/events/vmscan.h | 4 | ||||
| -rw-r--r-- | include/trace/events/workqueue.h | 4 | ||||
| -rw-r--r-- | include/trace/events/xen.h | 2 | 
21 files changed, 938 insertions, 65 deletions
| diff --git a/include/trace/bpf_probe.h b/include/trace/bpf_probe.h index 505dae0bed80..d6e556c0a085 100644 --- a/include/trace/bpf_probe.h +++ b/include/trace/bpf_probe.h @@ -69,8 +69,7 @@ __bpf_trace_##call(void *__data, proto)					\   * to make sure that if the tracepoint handling changes, the   * bpf probe will fail to compile unless it too is updated.   */ -#undef DEFINE_EVENT -#define DEFINE_EVENT(template, call, proto, args)			\ +#define __DEFINE_EVENT(template, call, proto, args, size)		\  static inline void bpf_test_probe_##call(void)				\  {									\  	check_trace_callback_type_##call(__bpf_trace_##template);	\ @@ -81,12 +80,36 @@ __bpf_trace_tp_map_##call = {						\  	.tp		= &__tracepoint_##call,				\  	.bpf_func	= (void *)__bpf_trace_##template,		\  	.num_args	= COUNT_ARGS(args),				\ +	.writable_size	= size,						\  }; +#define FIRST(x, ...) x + +#undef DEFINE_EVENT_WRITABLE +#define DEFINE_EVENT_WRITABLE(template, call, proto, args, size)	\ +static inline void bpf_test_buffer_##call(void)				\ +{									\ +	/* BUILD_BUG_ON() is ignored if the code is completely eliminated, but \ +	 * BUILD_BUG_ON_ZERO() uses a different mechanism that is not	\ +	 * dead-code-eliminated.					\ +	 */								\ +	FIRST(proto);							\ +	(void)BUILD_BUG_ON_ZERO(size != sizeof(*FIRST(args)));		\ +}									\ +__DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args), size) + +#undef DEFINE_EVENT +#define DEFINE_EVENT(template, call, proto, args)			\ +	__DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args), 0)  #undef DEFINE_EVENT_PRINT  #define DEFINE_EVENT_PRINT(template, name, proto, args, print)	\  	DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args))  #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +#undef DEFINE_EVENT_WRITABLE +#undef __DEFINE_EVENT +#undef FIRST +  #endif /* CONFIG_BPF_EVENTS */ diff --git a/include/trace/events/afs.h b/include/trace/events/afs.h index e3f005eae1f7..562f854ac4bf 100644 --- a/include/trace/events/afs.h +++ b/include/trace/events/afs.h @@ -33,8 +33,10 @@ enum afs_call_trace {  enum afs_fs_operation {  	afs_FS_FetchData		= 130,	/* AFS Fetch file data */ +	afs_FS_FetchACL			= 131,	/* AFS Fetch file ACL */  	afs_FS_FetchStatus		= 132,	/* AFS Fetch file status */  	afs_FS_StoreData		= 133,	/* AFS Store file data */ +	afs_FS_StoreACL			= 134,	/* AFS Store file ACL */  	afs_FS_StoreStatus		= 135,	/* AFS Store file status */  	afs_FS_RemoveFile		= 136,	/* AFS Remove a file */  	afs_FS_CreateFile		= 137,	/* AFS Create a file */ @@ -108,8 +110,12 @@ enum afs_edit_dir_reason {  	afs_edit_dir_for_create,  	afs_edit_dir_for_link,  	afs_edit_dir_for_mkdir, -	afs_edit_dir_for_rename, +	afs_edit_dir_for_rename_0, +	afs_edit_dir_for_rename_1, +	afs_edit_dir_for_rename_2,  	afs_edit_dir_for_rmdir, +	afs_edit_dir_for_silly_0, +	afs_edit_dir_for_silly_1,  	afs_edit_dir_for_symlink,  	afs_edit_dir_for_unlink,  }; @@ -152,6 +158,43 @@ enum afs_file_error {  	afs_file_error_writeback_fail,  }; +enum afs_flock_event { +	afs_flock_acquired, +	afs_flock_callback_break, +	afs_flock_defer_unlock, +	afs_flock_extend_fail, +	afs_flock_fail_other, +	afs_flock_fail_perm, +	afs_flock_no_lockers, +	afs_flock_release_fail, +	afs_flock_silly_delete, +	afs_flock_timestamp, +	afs_flock_try_to_lock, +	afs_flock_vfs_lock, +	afs_flock_vfs_locking, +	afs_flock_waited, +	afs_flock_waiting, +	afs_flock_work_extending, +	afs_flock_work_retry, +	afs_flock_work_unlocking, +	afs_flock_would_block, +}; + +enum afs_flock_operation { +	afs_flock_op_copy_lock, +	afs_flock_op_flock, +	afs_flock_op_grant, +	afs_flock_op_lock, +	afs_flock_op_release_lock, +	afs_flock_op_return_ok, +	afs_flock_op_return_eagain, +	afs_flock_op_return_edeadlk, +	afs_flock_op_return_error, +	afs_flock_op_set_lock, +	afs_flock_op_unlock, +	afs_flock_op_wake, +}; +  #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */  /* @@ -237,8 +280,12 @@ enum afs_file_error {  	EM(afs_edit_dir_for_create,		"Create") \  	EM(afs_edit_dir_for_link,		"Link  ") \  	EM(afs_edit_dir_for_mkdir,		"MkDir ") \ -	EM(afs_edit_dir_for_rename,		"Rename") \ +	EM(afs_edit_dir_for_rename_0,		"Renam0") \ +	EM(afs_edit_dir_for_rename_1,		"Renam1") \ +	EM(afs_edit_dir_for_rename_2,		"Renam2") \  	EM(afs_edit_dir_for_rmdir,		"RmDir ") \ +	EM(afs_edit_dir_for_silly_0,		"S_Ren0") \ +	EM(afs_edit_dir_for_silly_1,		"S_Ren1") \  	EM(afs_edit_dir_for_symlink,		"Symlnk") \  	E_(afs_edit_dir_for_unlink,		"Unlink") @@ -277,6 +324,56 @@ enum afs_file_error {  	EM(afs_file_error_mntpt,		"MNTPT_READ_FAILED")	\  	E_(afs_file_error_writeback_fail,	"WRITEBACK_FAILED") +#define afs_flock_types							\ +	EM(F_RDLCK,				"RDLCK")		\ +	EM(F_WRLCK,				"WRLCK")		\ +	E_(F_UNLCK,				"UNLCK") + +#define afs_flock_states						\ +	EM(AFS_VNODE_LOCK_NONE,			"NONE")			\ +	EM(AFS_VNODE_LOCK_WAITING_FOR_CB,	"WAIT_FOR_CB")		\ +	EM(AFS_VNODE_LOCK_SETTING,		"SETTING")		\ +	EM(AFS_VNODE_LOCK_GRANTED,		"GRANTED")		\ +	EM(AFS_VNODE_LOCK_EXTENDING,		"EXTENDING")		\ +	EM(AFS_VNODE_LOCK_NEED_UNLOCK,		"NEED_UNLOCK")		\ +	EM(AFS_VNODE_LOCK_UNLOCKING,		"UNLOCKING")		\ +	E_(AFS_VNODE_LOCK_DELETED,		"DELETED") + +#define afs_flock_events						\ +	EM(afs_flock_acquired,			"Acquired")		\ +	EM(afs_flock_callback_break,		"Callback")		\ +	EM(afs_flock_defer_unlock,		"D-Unlock")		\ +	EM(afs_flock_extend_fail,		"Ext_Fail")		\ +	EM(afs_flock_fail_other,		"ErrOther")		\ +	EM(afs_flock_fail_perm,			"ErrPerm ")		\ +	EM(afs_flock_no_lockers,		"NoLocker")		\ +	EM(afs_flock_release_fail,		"Rel_Fail")		\ +	EM(afs_flock_silly_delete,		"SillyDel")		\ +	EM(afs_flock_timestamp,			"Timestmp")		\ +	EM(afs_flock_try_to_lock,		"TryToLck")		\ +	EM(afs_flock_vfs_lock,			"VFSLock ")		\ +	EM(afs_flock_vfs_locking,		"VFSLking")		\ +	EM(afs_flock_waited,			"Waited  ")		\ +	EM(afs_flock_waiting,			"Waiting ")		\ +	EM(afs_flock_work_extending,		"Extendng")		\ +	EM(afs_flock_work_retry,		"Retry   ")		\ +	EM(afs_flock_work_unlocking,		"Unlcking")		\ +	E_(afs_flock_would_block,		"EWOULDBL") + +#define afs_flock_operations						\ +	EM(afs_flock_op_copy_lock,		"COPY    ")		\ +	EM(afs_flock_op_flock,			"->flock ")		\ +	EM(afs_flock_op_grant,			"GRANT   ")		\ +	EM(afs_flock_op_lock,			"->lock  ")		\ +	EM(afs_flock_op_release_lock,		"RELEASE ")		\ +	EM(afs_flock_op_return_ok,		"<-OK    ")		\ +	EM(afs_flock_op_return_edeadlk,		"<-EDEADL")		\ +	EM(afs_flock_op_return_eagain,		"<-EAGAIN")		\ +	EM(afs_flock_op_return_error,		"<-ERROR ")		\ +	EM(afs_flock_op_set_lock,		"SET     ")		\ +	EM(afs_flock_op_unlock,			"UNLOCK  ")		\ +	E_(afs_flock_op_wake,			"WAKE    ") +  /*   * Export enum symbols via userspace.   */ @@ -293,6 +390,8 @@ afs_edit_dir_reasons;  afs_eproto_causes;  afs_io_errors;  afs_file_errors; +afs_flock_types; +afs_flock_operations;  /*   * Now redefine the EM() and E_() macros to map the enums to the strings that @@ -442,6 +541,123 @@ TRACE_EVENT(afs_make_fs_call,  		      __print_symbolic(__entry->op, afs_fs_operations))  	    ); +TRACE_EVENT(afs_make_fs_calli, +	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid, +		     unsigned int i), + +	    TP_ARGS(call, fid, i), + +	    TP_STRUCT__entry( +		    __field(unsigned int,		call		) +		    __field(unsigned int,		i		) +		    __field(enum afs_fs_operation,	op		) +		    __field_struct(struct afs_fid,	fid		) +			     ), + +	    TP_fast_assign( +		    __entry->call = call->debug_id; +		    __entry->i = i; +		    __entry->op = call->operation_ID; +		    if (fid) { +			    __entry->fid = *fid; +		    } else { +			    __entry->fid.vid = 0; +			    __entry->fid.vnode = 0; +			    __entry->fid.unique = 0; +		    } +			   ), + +	    TP_printk("c=%08x %06llx:%06llx:%06x %s i=%u", +		      __entry->call, +		      __entry->fid.vid, +		      __entry->fid.vnode, +		      __entry->fid.unique, +		      __print_symbolic(__entry->op, afs_fs_operations), +		      __entry->i) +	    ); + +TRACE_EVENT(afs_make_fs_call1, +	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid, +		     const char *name), + +	    TP_ARGS(call, fid, name), + +	    TP_STRUCT__entry( +		    __field(unsigned int,		call		) +		    __field(enum afs_fs_operation,	op		) +		    __field_struct(struct afs_fid,	fid		) +		    __array(char,			name, 24	) +			     ), + +	    TP_fast_assign( +		    int __len = strlen(name); +		    __len = min(__len, 23); +		    __entry->call = call->debug_id; +		    __entry->op = call->operation_ID; +		    if (fid) { +			    __entry->fid = *fid; +		    } else { +			    __entry->fid.vid = 0; +			    __entry->fid.vnode = 0; +			    __entry->fid.unique = 0; +		    } +		    memcpy(__entry->name, name, __len); +		    __entry->name[__len] = 0; +			   ), + +	    TP_printk("c=%08x %06llx:%06llx:%06x %s \"%s\"", +		      __entry->call, +		      __entry->fid.vid, +		      __entry->fid.vnode, +		      __entry->fid.unique, +		      __print_symbolic(__entry->op, afs_fs_operations), +		      __entry->name) +	    ); + +TRACE_EVENT(afs_make_fs_call2, +	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid, +		     const char *name, const char *name2), + +	    TP_ARGS(call, fid, name, name2), + +	    TP_STRUCT__entry( +		    __field(unsigned int,		call		) +		    __field(enum afs_fs_operation,	op		) +		    __field_struct(struct afs_fid,	fid		) +		    __array(char,			name, 24	) +		    __array(char,			name2, 24	) +			     ), + +	    TP_fast_assign( +		    int __len = strlen(name); +		    int __len2 = strlen(name2); +		    __len = min(__len, 23); +		    __len2 = min(__len2, 23); +		    __entry->call = call->debug_id; +		    __entry->op = call->operation_ID; +		    if (fid) { +			    __entry->fid = *fid; +		    } else { +			    __entry->fid.vid = 0; +			    __entry->fid.vnode = 0; +			    __entry->fid.unique = 0; +		    } +		    memcpy(__entry->name, name, __len); +		    __entry->name[__len] = 0; +		    memcpy(__entry->name2, name2, __len2); +		    __entry->name2[__len2] = 0; +			   ), + +	    TP_printk("c=%08x %06llx:%06llx:%06x %s \"%s\" \"%s\"", +		      __entry->call, +		      __entry->fid.vid, +		      __entry->fid.vnode, +		      __entry->fid.unique, +		      __print_symbolic(__entry->op, afs_fs_operations), +		      __entry->name, +		      __entry->name2) +	    ); +  TRACE_EVENT(afs_make_vl_call,  	    TP_PROTO(struct afs_call *call), @@ -639,6 +855,38 @@ TRACE_EVENT(afs_call_state,  		      __entry->ret, __entry->abort)  	    ); +TRACE_EVENT(afs_lookup, +	    TP_PROTO(struct afs_vnode *dvnode, const struct qstr *name, +		     struct afs_vnode *vnode), + +	    TP_ARGS(dvnode, name, vnode), + +	    TP_STRUCT__entry( +		    __field_struct(struct afs_fid,	dfid		) +		    __field_struct(struct afs_fid,	fid		) +		    __array(char,			name, 24	) +			     ), + +	    TP_fast_assign( +		    int __len = min_t(int, name->len, 23); +		    __entry->dfid = dvnode->fid; +		    if (vnode) { +			    __entry->fid = vnode->fid; +		    } else { +			    __entry->fid.vid = 0; +			    __entry->fid.vnode = 0; +			    __entry->fid.unique = 0; +		    } +		    memcpy(__entry->name, name->name, __len); +		    __entry->name[__len] = 0; +			   ), + +	    TP_printk("d=%llx:%llx:%x \"%s\" f=%llx:%x", +		      __entry->dfid.vid, __entry->dfid.vnode, __entry->dfid.unique, +		      __entry->name, +		      __entry->fid.vnode, __entry->fid.unique) +	    ); +  TRACE_EVENT(afs_edit_dir,  	    TP_PROTO(struct afs_vnode *dvnode,  		     enum afs_edit_dir_reason why, @@ -660,12 +908,12 @@ TRACE_EVENT(afs_edit_dir,  		    __field(unsigned short,		slot		)  		    __field(unsigned int,		f_vnode		)  		    __field(unsigned int,		f_unique	) -		    __array(char,			name, 18	) +		    __array(char,			name, 24	)  			     ),  	    TP_fast_assign(  		    int __len = strlen(name); -		    __len = min(__len, 17); +		    __len = min(__len, 23);  		    __entry->vnode	= dvnode->fid.vnode;  		    __entry->unique	= dvnode->fid.unique;  		    __entry->why	= why; @@ -678,7 +926,7 @@ TRACE_EVENT(afs_edit_dir,  		    __entry->name[__len] = 0;  			   ), -	    TP_printk("d=%x:%x %s %s %u[%u] f=%x:%x %s", +	    TP_printk("d=%x:%x %s %s %u[%u] f=%x:%x \"%s\"",  		      __entry->vnode, __entry->unique,  		      __print_symbolic(__entry->why, afs_edit_dir_reasons),  		      __print_symbolic(__entry->op, afs_edit_dir_ops), @@ -796,6 +1044,133 @@ TRACE_EVENT(afs_cm_no_server_u,  		      __entry->call, __entry->op_id, &__entry->uuid)  	    ); +TRACE_EVENT(afs_flock_ev, +	    TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl, +		     enum afs_flock_event event, int error), + +	    TP_ARGS(vnode, fl, event, error), + +	    TP_STRUCT__entry( +		    __field_struct(struct afs_fid,	fid		) +		    __field(enum afs_flock_event,	event		) +		    __field(enum afs_lock_state,	state		) +		    __field(int,			error		) +		    __field(unsigned int,		debug_id	) +			     ), + +	    TP_fast_assign( +		    __entry->fid = vnode->fid; +		    __entry->event = event; +		    __entry->state = vnode->lock_state; +		    __entry->error = error; +		    __entry->debug_id = fl ? fl->fl_u.afs.debug_id : 0; +			   ), + +	    TP_printk("%llx:%llx:%x %04x %s s=%s e=%d", +		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique, +		      __entry->debug_id, +		      __print_symbolic(__entry->event, afs_flock_events), +		      __print_symbolic(__entry->state, afs_flock_states), +		      __entry->error) +	    ); + +TRACE_EVENT(afs_flock_op, +	    TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl, +		     enum afs_flock_operation op), + +	    TP_ARGS(vnode, fl, op), + +	    TP_STRUCT__entry( +		    __field_struct(struct afs_fid,	fid		) +		    __field(loff_t,			from		) +		    __field(loff_t,			len		) +		    __field(enum afs_flock_operation,	op		) +		    __field(unsigned char,		type		) +		    __field(unsigned int,		flags		) +		    __field(unsigned int,		debug_id	) +			     ), + +	    TP_fast_assign( +		    __entry->fid = vnode->fid; +		    __entry->from = fl->fl_start; +		    __entry->len = fl->fl_end - fl->fl_start + 1; +		    __entry->op = op; +		    __entry->type = fl->fl_type; +		    __entry->flags = fl->fl_flags; +		    __entry->debug_id = fl->fl_u.afs.debug_id; +			   ), + +	    TP_printk("%llx:%llx:%x %04x %s t=%s R=%llx/%llx f=%x", +		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique, +		      __entry->debug_id, +		      __print_symbolic(__entry->op, afs_flock_operations), +		      __print_symbolic(__entry->type, afs_flock_types), +		      __entry->from, __entry->len, __entry->flags) +	    ); + +TRACE_EVENT(afs_reload_dir, +	    TP_PROTO(struct afs_vnode *vnode), + +	    TP_ARGS(vnode), + +	    TP_STRUCT__entry( +		    __field_struct(struct afs_fid,	fid		) +			     ), + +	    TP_fast_assign( +		    __entry->fid = vnode->fid; +			   ), + +	    TP_printk("%llx:%llx:%x", +		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique) +	    ); + +TRACE_EVENT(afs_silly_rename, +	    TP_PROTO(struct afs_vnode *vnode, bool done), + +	    TP_ARGS(vnode, done), + +	    TP_STRUCT__entry( +		    __field_struct(struct afs_fid,	fid		) +		    __field(bool,			done		) +			     ), + +	    TP_fast_assign( +		    __entry->fid = vnode->fid; +		    __entry->done = done; +			   ), + +	    TP_printk("%llx:%llx:%x done=%u", +		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique, +		      __entry->done) +	    ); + +TRACE_EVENT(afs_get_tree, +	    TP_PROTO(struct afs_cell *cell, struct afs_volume *volume), + +	    TP_ARGS(cell, volume), + +	    TP_STRUCT__entry( +		    __field(u64,			vid		) +		    __array(char,			cell, 24	) +		    __array(char,			volume, 24	) +			     ), + +	    TP_fast_assign( +		    int __len; +		    __entry->vid = volume->vid; +		    __len = min_t(int, cell->name_len, 23); +		    memcpy(__entry->cell, cell->name, __len); +		    __entry->cell[__len] = 0; +		    __len = min_t(int, volume->name_len, 23); +		    memcpy(__entry->volume, volume->name, __len); +		    __entry->volume[__len] = 0; +			   ), + +	    TP_printk("--- MOUNT %s:%s %llx", +		      __entry->cell, __entry->volume, __entry->vid) +	    ); +  #endif /* _TRACE_AFS_H */  /* This part must be outside protection */ diff --git a/include/trace/events/bpf_test_run.h b/include/trace/events/bpf_test_run.h new file mode 100644 index 000000000000..265447e3f71a --- /dev/null +++ b/include/trace/events/bpf_test_run.h @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM bpf_test_run + +#if !defined(_TRACE_BPF_TEST_RUN_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_BPF_TEST_RUN_H + +#include <linux/tracepoint.h> + +DECLARE_EVENT_CLASS(bpf_test_finish, + +	TP_PROTO(int *err), + +	TP_ARGS(err), + +	TP_STRUCT__entry( +		__field(int, err) +	), + +	TP_fast_assign( +		__entry->err = *err; +	), + +	TP_printk("bpf_test_finish with err=%d", __entry->err) +); + +#ifdef DEFINE_EVENT_WRITABLE +#undef BPF_TEST_RUN_DEFINE_EVENT +#define BPF_TEST_RUN_DEFINE_EVENT(template, call, proto, args, size)	\ +	DEFINE_EVENT_WRITABLE(template, call, PARAMS(proto),		\ +			      PARAMS(args), size) +#else +#undef BPF_TEST_RUN_DEFINE_EVENT +#define BPF_TEST_RUN_DEFINE_EVENT(template, call, proto, args, size)	\ +	DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args)) +#endif + +BPF_TEST_RUN_DEFINE_EVENT(bpf_test_finish, bpf_test_finish, + +	TP_PROTO(int *err), + +	TP_ARGS(err), + +	sizeof(int) +); + +#endif + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h index ab1cc33adbac..f9eff010fc7e 100644 --- a/include/trace/events/btrfs.h +++ b/include/trace/events/btrfs.h @@ -27,6 +27,7 @@ struct btrfs_work;  struct __btrfs_workqueue;  struct btrfs_qgroup_extent_record;  struct btrfs_qgroup; +struct extent_io_tree;  struct prelim_ref;  TRACE_DEFINE_ENUM(FLUSH_DELAYED_ITEMS_NR); @@ -77,6 +78,17 @@ TRACE_DEFINE_ENUM(COMMIT_TRANS);  		{ BTRFS_QGROUP_RSV_META_PERTRANS, "META_PERTRANS" },	\  		{ BTRFS_QGROUP_RSV_META_PREALLOC, "META_PREALLOC" }) +#define show_extent_io_tree_owner(owner)				       \ +	__print_symbolic(owner,						       \ +		{ IO_TREE_FS_INFO_FREED_EXTENTS0, "FREED_EXTENTS0" },	       \ +		{ IO_TREE_FS_INFO_FREED_EXTENTS1, "FREED_EXTENTS1" },	       \ +		{ IO_TREE_INODE_IO,		  "INODE_IO" },		       \ +		{ IO_TREE_INODE_IO_FAILURE,	  "INODE_IO_FAILURE" },	       \ +		{ IO_TREE_RELOC_BLOCKS,		  "RELOC_BLOCKS" },	       \ +		{ IO_TREE_TRANS_DIRTY_PAGES,	  "TRANS_DIRTY_PAGES" },       \ +		{ IO_TREE_ROOT_DIRTY_LOG_PAGES,	  "ROOT_DIRTY_LOG_PAGES" },    \ +		{ IO_TREE_SELFTEST,		  "SELFTEST" }) +  #define BTRFS_GROUP_FLAGS	\  	{ BTRFS_BLOCK_GROUP_DATA,	"DATA"},	\  	{ BTRFS_BLOCK_GROUP_SYSTEM,	"SYSTEM"},	\ @@ -88,11 +100,34 @@ TRACE_DEFINE_ENUM(COMMIT_TRANS);  	{ BTRFS_BLOCK_GROUP_RAID5,	"RAID5"},	\  	{ BTRFS_BLOCK_GROUP_RAID6,	"RAID6"} +#define EXTENT_FLAGS						\ +	{ EXTENT_DIRTY,			"DIRTY"},		\ +	{ EXTENT_UPTODATE,		"UPTODATE"},		\ +	{ EXTENT_LOCKED,		"LOCKED"},		\ +	{ EXTENT_NEW,			"NEW"},			\ +	{ EXTENT_DELALLOC,		"DELALLOC"},		\ +	{ EXTENT_DEFRAG,		"DEFRAG"},		\ +	{ EXTENT_BOUNDARY,		"BOUNDARY"},		\ +	{ EXTENT_NODATASUM,		"NODATASUM"},		\ +	{ EXTENT_CLEAR_META_RESV,	"CLEAR_META_RESV"},	\ +	{ EXTENT_NEED_WAIT,		"NEED_WAIT"},		\ +	{ EXTENT_DAMAGED,		"DAMAGED"},		\ +	{ EXTENT_NORESERVE,		"NORESERVE"},		\ +	{ EXTENT_QGROUP_RESERVED,	"QGROUP_RESERVED"},	\ +	{ EXTENT_CLEAR_DATA_RESV,	"CLEAR_DATA_RESV"},	\ +	{ EXTENT_DELALLOC_NEW,		"DELALLOC_NEW"} +  #define BTRFS_FSID_SIZE 16  #define TP_STRUCT__entry_fsid __array(u8, fsid, BTRFS_FSID_SIZE)  #define TP_fast_assign_fsid(fs_info)					\ -	memcpy(__entry->fsid, fs_info->fs_devices->fsid, BTRFS_FSID_SIZE) +({									\ +	if (fs_info)							\ +		memcpy(__entry->fsid, fs_info->fs_devices->fsid,	\ +		       BTRFS_FSID_SIZE);				\ +	else								\ +		memset(__entry->fsid, 0, BTRFS_FSID_SIZE);		\ +})  #define TP_STRUCT__entry_btrfs(args...)					\  	TP_STRUCT__entry(						\ @@ -1345,7 +1380,7 @@ DECLARE_EVENT_CLASS(btrfs__work,  		__entry->normal_work	= &work->normal_work;  	), -	TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%pf ordered_func=%p " +	TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%ps ordered_func=%p "  		  "ordered_free=%p",  		  __entry->work, __entry->normal_work, __entry->wq,  		   __entry->func, __entry->ordered_func, __entry->ordered_free) @@ -1850,6 +1885,212 @@ DEFINE_EVENT(btrfs__block_group, btrfs_skip_unused_block_group,  	TP_ARGS(bg_cache)  ); +TRACE_EVENT(btrfs_set_extent_bit, +	TP_PROTO(const struct extent_io_tree *tree, +		 u64 start, u64 len, unsigned set_bits), + +	TP_ARGS(tree, start, len, set_bits), + +	TP_STRUCT__entry_btrfs( +		__field(	unsigned,	owner	) +		__field(	u64,		ino	) +		__field(	u64,		rootid	) +		__field(	u64,		start	) +		__field(	u64,		len	) +		__field(	unsigned,	set_bits) +	), + +	TP_fast_assign_btrfs(tree->fs_info, +		__entry->owner = tree->owner; +		if (tree->private_data) { +			struct inode *inode = tree->private_data; + +			__entry->ino	= btrfs_ino(BTRFS_I(inode)); +			__entry->rootid	= +				BTRFS_I(inode)->root->root_key.objectid; +		} else { +			__entry->ino	= 0; +			__entry->rootid	= 0; +		} +		__entry->start		= start; +		__entry->len		= len; +		__entry->set_bits	= set_bits; +	), + +	TP_printk_btrfs( +		"io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s", +		show_extent_io_tree_owner(__entry->owner), __entry->ino, +		__entry->rootid, __entry->start, __entry->len, +		__print_flags(__entry->set_bits, "|", EXTENT_FLAGS)) +); + +TRACE_EVENT(btrfs_clear_extent_bit, +	TP_PROTO(const struct extent_io_tree *tree, +		 u64 start, u64 len, unsigned clear_bits), + +	TP_ARGS(tree, start, len, clear_bits), + +	TP_STRUCT__entry_btrfs( +		__field(	unsigned,	owner	) +		__field(	u64,		ino	) +		__field(	u64,		rootid	) +		__field(	u64,		start	) +		__field(	u64,		len	) +		__field(	unsigned,	clear_bits) +	), + +	TP_fast_assign_btrfs(tree->fs_info, +		__entry->owner = tree->owner; +		if (tree->private_data) { +			struct inode *inode = tree->private_data; + +			__entry->ino	= btrfs_ino(BTRFS_I(inode)); +			__entry->rootid	= +				BTRFS_I(inode)->root->root_key.objectid; +		} else { +			__entry->ino	= 0; +			__entry->rootid	= 0; +		} +		__entry->start		= start; +		__entry->len		= len; +		__entry->clear_bits	= clear_bits; +	), + +	TP_printk_btrfs( +		"io_tree=%s ino=%llu root=%llu start=%llu len=%llu clear_bits=%s", +		show_extent_io_tree_owner(__entry->owner), __entry->ino, +		__entry->rootid, __entry->start, __entry->len, +		__print_flags(__entry->clear_bits, "|", EXTENT_FLAGS)) +); + +TRACE_EVENT(btrfs_convert_extent_bit, +	TP_PROTO(const struct extent_io_tree *tree, +		 u64 start, u64 len, unsigned set_bits, unsigned clear_bits), + +	TP_ARGS(tree, start, len, set_bits, clear_bits), + +	TP_STRUCT__entry_btrfs( +		__field(	unsigned,	owner	) +		__field(	u64,		ino	) +		__field(	u64,		rootid	) +		__field(	u64,		start	) +		__field(	u64,		len	) +		__field(	unsigned,	set_bits) +		__field(	unsigned,	clear_bits) +	), + +	TP_fast_assign_btrfs(tree->fs_info, +		__entry->owner = tree->owner; +		if (tree->private_data) { +			struct inode *inode = tree->private_data; + +			__entry->ino	= btrfs_ino(BTRFS_I(inode)); +			__entry->rootid	= +				BTRFS_I(inode)->root->root_key.objectid; +		} else { +			__entry->ino	= 0; +			__entry->rootid	= 0; +		} +		__entry->start		= start; +		__entry->len		= len; +		__entry->set_bits	= set_bits; +		__entry->clear_bits	= clear_bits; +	), + +	TP_printk_btrfs( +"io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s clear_bits=%s", +		  show_extent_io_tree_owner(__entry->owner), __entry->ino, +		  __entry->rootid, __entry->start, __entry->len, +		  __print_flags(__entry->set_bits , "|", EXTENT_FLAGS), +		  __print_flags(__entry->clear_bits, "|", EXTENT_FLAGS)) +); + +DECLARE_EVENT_CLASS(btrfs_sleep_tree_lock, +	TP_PROTO(const struct extent_buffer *eb, u64 start_ns), + +	TP_ARGS(eb, start_ns), + +	TP_STRUCT__entry_btrfs( +		__field(	u64,	block		) +		__field(	u64,	generation	) +		__field(	u64,	start_ns	) +		__field(	u64,	end_ns		) +		__field(	u64,	diff_ns		) +		__field(	u64,	owner		) +		__field(	int,	is_log_tree	) +	), + +	TP_fast_assign_btrfs(eb->fs_info, +		__entry->block		= eb->start; +		__entry->generation	= btrfs_header_generation(eb); +		__entry->start_ns	= start_ns; +		__entry->end_ns		= ktime_get_ns(); +		__entry->diff_ns	= __entry->end_ns - start_ns; +		__entry->owner		= btrfs_header_owner(eb); +		__entry->is_log_tree	= (eb->log_index >= 0); +	), + +	TP_printk_btrfs( +"block=%llu generation=%llu start_ns=%llu end_ns=%llu diff_ns=%llu owner=%llu is_log_tree=%d", +		__entry->block, __entry->generation, +		__entry->start_ns, __entry->end_ns, __entry->diff_ns, +		__entry->owner, __entry->is_log_tree) +); + +DEFINE_EVENT(btrfs_sleep_tree_lock, btrfs_tree_read_lock, +	TP_PROTO(const struct extent_buffer *eb, u64 start_ns), + +	TP_ARGS(eb, start_ns) +); + +DEFINE_EVENT(btrfs_sleep_tree_lock, btrfs_tree_lock, +	TP_PROTO(const struct extent_buffer *eb, u64 start_ns), + +	TP_ARGS(eb, start_ns) +); + +DECLARE_EVENT_CLASS(btrfs_locking_events, +	TP_PROTO(const struct extent_buffer *eb), + +	TP_ARGS(eb), + +	TP_STRUCT__entry_btrfs( +		__field(	u64,	block		) +		__field(	u64,	generation	) +		__field(	u64,	owner		) +		__field(	int,	is_log_tree	) +	), + +	TP_fast_assign_btrfs(eb->fs_info, +		__entry->block		= eb->start; +		__entry->generation	= btrfs_header_generation(eb); +		__entry->owner		= btrfs_header_owner(eb); +		__entry->is_log_tree	= (eb->log_index >= 0); +	), + +	TP_printk_btrfs("block=%llu generation=%llu owner=%llu is_log_tree=%d", +		__entry->block, __entry->generation, +		__entry->owner, __entry->is_log_tree) +); + +#define DEFINE_BTRFS_LOCK_EVENT(name)				\ +DEFINE_EVENT(btrfs_locking_events, name,			\ +		TP_PROTO(const struct extent_buffer *eb),	\ +								\ +		TP_ARGS(eb)					\ +) + +DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_unlock); +DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock); +DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock_blocking); +DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_read); +DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_write); +DEFINE_BTRFS_LOCK_EVENT(btrfs_clear_lock_blocking_read); +DEFINE_BTRFS_LOCK_EVENT(btrfs_clear_lock_blocking_write); +DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_read_lock); +DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_write_lock); +DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_lock_atomic); +  #endif /* _TRACE_BTRFS_H */  /* This part must be outside protection */ diff --git a/include/trace/events/cpuhp.h b/include/trace/events/cpuhp.h index fe1d6e8cd99d..ad16f77310c6 100644 --- a/include/trace/events/cpuhp.h +++ b/include/trace/events/cpuhp.h @@ -30,7 +30,7 @@ TRACE_EVENT(cpuhp_enter,  		__entry->fun	= fun;  	), -	TP_printk("cpu: %04u target: %3d step: %3d (%pf)", +	TP_printk("cpu: %04u target: %3d step: %3d (%ps)",  		  __entry->cpu, __entry->target, __entry->idx, __entry->fun)  ); @@ -58,7 +58,7 @@ TRACE_EVENT(cpuhp_multi_enter,  		__entry->fun	= fun;  	), -	TP_printk("cpu: %04u target: %3d step: %3d (%pf)", +	TP_printk("cpu: %04u target: %3d step: %3d (%ps)",  		  __entry->cpu, __entry->target, __entry->idx, __entry->fun)  ); diff --git a/include/trace/events/devfreq.h b/include/trace/events/devfreq.h new file mode 100644 index 000000000000..cf5b8772175d --- /dev/null +++ b/include/trace/events/devfreq.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM devfreq + +#if !defined(_TRACE_DEVFREQ_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DEVFREQ_H + +#include <linux/devfreq.h> +#include <linux/tracepoint.h> + +TRACE_EVENT(devfreq_monitor, +	TP_PROTO(struct devfreq *devfreq), + +	TP_ARGS(devfreq), + +	TP_STRUCT__entry( +		__field(unsigned long, freq) +		__field(unsigned long, busy_time) +		__field(unsigned long, total_time) +		__field(unsigned int, polling_ms) +		__string(dev_name, dev_name(&devfreq->dev)) +	), + +	TP_fast_assign( +		__entry->freq = devfreq->previous_freq; +		__entry->busy_time = devfreq->last_status.busy_time; +		__entry->total_time = devfreq->last_status.total_time; +		__entry->polling_ms = devfreq->profile->polling_ms; +		__assign_str(dev_name, dev_name(&devfreq->dev)); +	), + +	TP_printk("dev_name=%s freq=%lu polling_ms=%u load=%lu", +		__get_str(dev_name), __entry->freq, __entry->polling_ms, +		__entry->total_time == 0 ? 0 : +			(100 * __entry->busy_time) / __entry->total_time) +); +#endif /* _TRACE_DEVFREQ_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff --git a/include/trace/events/fib.h b/include/trace/events/fib.h index 6271bab63bfb..6f2a4dc35e37 100644 --- a/include/trace/events/fib.h +++ b/include/trace/events/fib.h @@ -13,9 +13,9 @@  TRACE_EVENT(fib_table_lookup,  	TP_PROTO(u32 tb_id, const struct flowi4 *flp, -		 const struct fib_nh *nh, int err), +		 const struct fib_nh_common *nhc, int err), -	TP_ARGS(tb_id, flp, nh, err), +	TP_ARGS(tb_id, flp, nhc, err),  	TP_STRUCT__entry(  		__field(	u32,	tb_id		) @@ -28,14 +28,17 @@ TRACE_EVENT(fib_table_lookup,  		__field(	__u8,	flags		)  		__array(	__u8,	src,	4	)  		__array(	__u8,	dst,	4	) -		__array(	__u8,	gw,	4	) -		__array(	__u8,	saddr,	4	) +		__array(	__u8,	gw4,	4	) +		__array(	__u8,	gw6,	16	)  		__field(	u16,	sport		)  		__field(	u16,	dport		)  		__dynamic_array(char,  name,   IFNAMSIZ )  	),  	TP_fast_assign( +		struct in6_addr in6_zero = {}; +		struct net_device *dev; +		struct in6_addr *in6;  		__be32 *p32;  		__entry->tb_id = tb_id; @@ -62,30 +65,37 @@ TRACE_EVENT(fib_table_lookup,  			__entry->dport = 0;  		} -		if (nh) { -			p32 = (__be32 *) __entry->saddr; -			*p32 = nh->nh_saddr; +		dev = nhc ? nhc->nhc_dev : NULL; +		__assign_str(name, dev ? dev->name : "-"); -			p32 = (__be32 *) __entry->gw; -			*p32 = nh->nh_gw; +		if (nhc) { +			if (nhc->nhc_gw_family == AF_INET) { +				p32 = (__be32 *) __entry->gw4; +				*p32 = nhc->nhc_gw.ipv4; -			__assign_str(name, nh->nh_dev ? nh->nh_dev->name : "-"); -		} else { -			p32 = (__be32 *) __entry->saddr; -			*p32 = 0; +				in6 = (struct in6_addr *)__entry->gw6; +				*in6 = in6_zero; +			} else if (nhc->nhc_gw_family == AF_INET6) { +				p32 = (__be32 *) __entry->gw4; +				*p32 = 0; -			p32 = (__be32 *) __entry->gw; +				in6 = (struct in6_addr *)__entry->gw6; +				*in6 = nhc->nhc_gw.ipv6; +			} +		} else { +			p32 = (__be32 *) __entry->gw4;  			*p32 = 0; -			__assign_str(name, "-"); +			in6 = (struct in6_addr *)__entry->gw6; +			*in6 = in6_zero;  		}  	), -	TP_printk("table %u oif %d iif %d proto %u %pI4/%u -> %pI4/%u tos %d scope %d flags %x ==> dev %s gw %pI4 src %pI4 err %d", +	TP_printk("table %u oif %d iif %d proto %u %pI4/%u -> %pI4/%u tos %d scope %d flags %x ==> dev %s gw %pI4/%pI6c err %d",  		  __entry->tb_id, __entry->oif, __entry->iif, __entry->proto,  		  __entry->src, __entry->sport, __entry->dst, __entry->dport,  		  __entry->tos, __entry->scope, __entry->flags, -		  __get_str(name), __entry->gw, __entry->saddr, __entry->err) +		  __get_str(name), __entry->gw4, __entry->gw6, __entry->err)  );  #endif /* _TRACE_FIB_H */ diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h index b088b54d699c..c6abdcc77c12 100644 --- a/include/trace/events/fib6.h +++ b/include/trace/events/fib6.h @@ -12,10 +12,10 @@  TRACE_EVENT(fib6_table_lookup, -	TP_PROTO(const struct net *net, const struct fib6_info *f6i, +	TP_PROTO(const struct net *net, const struct fib6_result *res,  		 struct fib6_table *table, const struct flowi6 *flp), -	TP_ARGS(net, f6i, table, flp), +	TP_ARGS(net, res, table, flp),  	TP_STRUCT__entry(  		__field(	u32,	tb_id		) @@ -39,7 +39,7 @@ TRACE_EVENT(fib6_table_lookup,  		struct in6_addr *in6;  		__entry->tb_id = table->tb6_id; -		__entry->err = ip6_rt_type_to_error(f6i->fib6_type); +		__entry->err = ip6_rt_type_to_error(res->fib6_type);  		__entry->oif = flp->flowi6_oif;  		__entry->iif = flp->flowi6_iif;  		__entry->tos = ip6_tclass(flp->flowlabel); @@ -62,20 +62,20 @@ TRACE_EVENT(fib6_table_lookup,  			__entry->dport = 0;  		} -		if (f6i->fib6_nh.nh_dev) { -			__assign_str(name, f6i->fib6_nh.nh_dev); +		if (res->nh && res->nh->fib_nh_dev) { +			__assign_str(name, res->nh->fib_nh_dev);  		} else {  			__assign_str(name, "-");  		} -		if (f6i == net->ipv6.fib6_null_entry) { +		if (res->f6i == net->ipv6.fib6_null_entry) {  			struct in6_addr in6_zero = {};  			in6 = (struct in6_addr *)__entry->gw;  			*in6 = in6_zero; -		} else if (f6i) { +		} else if (res->nh) {  			in6 = (struct in6_addr *)__entry->gw; -			*in6 = f6i->fib6_nh.nh_gw; +			*in6 = res->nh->fib_nh_gw6;  		}  	), diff --git a/include/trace/events/mlxsw.h b/include/trace/events/mlxsw.h index 6a4cfaef33a2..19a25ed323a5 100644 --- a/include/trace/events/mlxsw.h +++ b/include/trace/events/mlxsw.h @@ -93,7 +93,7 @@ TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_migrate_end,  		  __entry->mlxsw_sp, __entry->vregion)  ); -TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash_dis, +TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash_rollback_failed,  	TP_PROTO(const struct mlxsw_sp *mlxsw_sp,  		 const struct mlxsw_sp_acl_tcam_vregion *vregion), diff --git a/include/trace/events/nbd.h b/include/trace/events/nbd.h new file mode 100644 index 000000000000..9849956f34d8 --- /dev/null +++ b/include/trace/events/nbd.h @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM nbd + +#if !defined(_TRACE_NBD_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_NBD_H + +#include <linux/tracepoint.h> + +DECLARE_EVENT_CLASS(nbd_transport_event, + +	TP_PROTO(struct request *req, u64 handle), + +	TP_ARGS(req, handle), + +	TP_STRUCT__entry( +		__field(struct request *, req) +		__field(u64, handle) +	), + +	TP_fast_assign( +		__entry->req = req; +		__entry->handle = handle; +	), + +	TP_printk( +		"nbd transport event: request %p, handle 0x%016llx", +		__entry->req, +		__entry->handle +	) +); + +DEFINE_EVENT(nbd_transport_event, nbd_header_sent, + +	TP_PROTO(struct request *req, u64 handle), + +	TP_ARGS(req, handle) +); + +DEFINE_EVENT(nbd_transport_event, nbd_payload_sent, + +	TP_PROTO(struct request *req, u64 handle), + +	TP_ARGS(req, handle) +); + +DEFINE_EVENT(nbd_transport_event, nbd_header_received, + +	TP_PROTO(struct request *req, u64 handle), + +	TP_ARGS(req, handle) +); + +DEFINE_EVENT(nbd_transport_event, nbd_payload_received, + +	TP_PROTO(struct request *req, u64 handle), + +	TP_ARGS(req, handle) +); + +DECLARE_EVENT_CLASS(nbd_send_request, + +	TP_PROTO(struct nbd_request *nbd_request, int index, +		 struct request *rq), + +	TP_ARGS(nbd_request, index, rq), + +	TP_STRUCT__entry( +		__field(struct nbd_request *, nbd_request) +		__field(u64, dev_index) +		__field(struct request *, request) +	), + +	TP_fast_assign( +		__entry->nbd_request = 0; +		__entry->dev_index = index; +		__entry->request = rq; +	), + +	TP_printk("nbd%lld: request %p", __entry->dev_index, __entry->request) +); + +#ifdef DEFINE_EVENT_WRITABLE +#undef NBD_DEFINE_EVENT +#define NBD_DEFINE_EVENT(template, call, proto, args, size)		\ +	DEFINE_EVENT_WRITABLE(template, call, PARAMS(proto),		\ +			      PARAMS(args), size) +#else +#undef NBD_DEFINE_EVENT +#define NBD_DEFINE_EVENT(template, call, proto, args, size)		\ +	DEFINE_EVENT(template, call, PARAMS(proto), PARAMS(args)) +#endif + +NBD_DEFINE_EVENT(nbd_send_request, nbd_send_request, + +	TP_PROTO(struct nbd_request *nbd_request, int index, +		 struct request *rq), + +	TP_ARGS(nbd_request, index, rq), + +	sizeof(struct nbd_request) +); + +#endif + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff --git a/include/trace/events/net.h b/include/trace/events/net.h index 1efd7d9b25fe..2399073c3afc 100644 --- a/include/trace/events/net.h +++ b/include/trace/events/net.h @@ -95,6 +95,29 @@ TRACE_EVENT(net_dev_xmit,  		__get_str(name), __entry->skbaddr, __entry->len, __entry->rc)  ); +TRACE_EVENT(net_dev_xmit_timeout, + +	TP_PROTO(struct net_device *dev, +		 int queue_index), + +	TP_ARGS(dev, queue_index), + +	TP_STRUCT__entry( +		__string(	name,		dev->name	) +		__string(	driver,		netdev_drivername(dev)) +		__field(	int,		queue_index	) +	), + +	TP_fast_assign( +		__assign_str(name, dev->name); +		__assign_str(driver, netdev_drivername(dev)); +		__entry->queue_index = queue_index; +	), + +	TP_printk("dev=%s driver=%s queue=%d", +		__get_str(name), __get_str(driver), __entry->queue_index) +); +  DECLARE_EVENT_CLASS(net_dev_template,  	TP_PROTO(struct sk_buff *skb), diff --git a/include/trace/events/preemptirq.h b/include/trace/events/preemptirq.h index 9a0d4ceeb166..95fba0471e5b 100644 --- a/include/trace/events/preemptirq.h +++ b/include/trace/events/preemptirq.h @@ -27,7 +27,7 @@ DECLARE_EVENT_CLASS(preemptirq_template,  		__entry->parent_offs = (u32)(parent_ip - (unsigned long)_stext);  	), -	TP_printk("caller=%pF parent=%pF", +	TP_printk("caller=%pS parent=%pS",  		  (void *)((unsigned long)(_stext) + __entry->caller_offs),  		  (void *)((unsigned long)(_stext) + __entry->parent_offs))  ); diff --git a/include/trace/events/random.h b/include/trace/events/random.h index 0560dfc33f1c..32c10a515e2d 100644 --- a/include/trace/events/random.h +++ b/include/trace/events/random.h @@ -62,15 +62,14 @@ DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock,  TRACE_EVENT(credit_entropy_bits,  	TP_PROTO(const char *pool_name, int bits, int entropy_count, -		 int entropy_total, unsigned long IP), +		 unsigned long IP), -	TP_ARGS(pool_name, bits, entropy_count, entropy_total, IP), +	TP_ARGS(pool_name, bits, entropy_count, IP),  	TP_STRUCT__entry(  		__field( const char *,	pool_name		)  		__field(	  int,	bits			)  		__field(	  int,	entropy_count		) -		__field(	  int,	entropy_total		)  		__field(unsigned long,	IP			)  	), @@ -78,14 +77,12 @@ TRACE_EVENT(credit_entropy_bits,  		__entry->pool_name	= pool_name;  		__entry->bits		= bits;  		__entry->entropy_count	= entropy_count; -		__entry->entropy_total	= entropy_total;  		__entry->IP		= IP;  	), -	TP_printk("%s pool: bits %d entropy_count %d entropy_total %d " -		  "caller %pS", __entry->pool_name, __entry->bits, -		  __entry->entropy_count, __entry->entropy_total, -		  (void *)__entry->IP) +	TP_printk("%s pool: bits %d entropy_count %d caller %pS", +		  __entry->pool_name, __entry->bits, +		  __entry->entropy_count, (void *)__entry->IP)  );  TRACE_EVENT(push_to_pool, diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index f0c4d10e614b..80339fd14c1c 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h @@ -491,7 +491,7 @@ TRACE_EVENT(rcu_callback,  		__entry->qlen = qlen;  	), -	TP_printk("%s rhp=%p func=%pf %ld/%ld", +	TP_printk("%s rhp=%p func=%ps %ld/%ld",  		  __entry->rcuname, __entry->rhp, __entry->func,  		  __entry->qlen_lazy, __entry->qlen)  ); @@ -587,7 +587,7 @@ TRACE_EVENT(rcu_invoke_callback,  		__entry->func = rhp->func;  	), -	TP_printk("%s rhp=%p func=%pf", +	TP_printk("%s rhp=%p func=%ps",  		  __entry->rcuname, __entry->rhp, __entry->func)  ); diff --git a/include/trace/events/spi.h b/include/trace/events/spi.h index aef6869f563d..0dd9171d2ad8 100644 --- a/include/trace/events/spi.h +++ b/include/trace/events/spi.h @@ -131,9 +131,11 @@ DECLARE_EVENT_CLASS(spi_transfer,  		__field(        struct spi_transfer *,   xfer   )  		__field(        int,            len             )  		__dynamic_array(u8, rx_buf, -				spi_valid_rxbuf(msg, xfer) ? xfer->len : 0) +				spi_valid_rxbuf(msg, xfer) ? +					(xfer->len < 64 ? xfer->len : 64) : 0)  		__dynamic_array(u8, tx_buf, -				spi_valid_txbuf(msg, xfer) ? xfer->len : 0) +				spi_valid_txbuf(msg, xfer) ? +					(xfer->len < 64 ? xfer->len : 64) : 0)  	),  	TP_fast_assign( @@ -144,11 +146,11 @@ DECLARE_EVENT_CLASS(spi_transfer,  		if (spi_valid_txbuf(msg, xfer))  			memcpy(__get_dynamic_array(tx_buf), -			       xfer->tx_buf, xfer->len); +			       xfer->tx_buf, __get_dynamic_array_len(tx_buf));  		if (spi_valid_rxbuf(msg, xfer))  			memcpy(__get_dynamic_array(rx_buf), -			       xfer->rx_buf, xfer->len); +			       xfer->rx_buf, __get_dynamic_array_len(rx_buf));  	),  	TP_printk("spi%d.%d %p len=%d tx=[%*phD] rx=[%*phD]", diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h index 7e899e635d33..f0a6f0c5549c 100644 --- a/include/trace/events/sunrpc.h +++ b/include/trace/events/sunrpc.h @@ -146,7 +146,7 @@ DECLARE_EVENT_CLASS(rpc_task_running,  		__entry->flags = task->tk_flags;  		), -	TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%pf", +	TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%ps",  		__entry->task_id, __entry->client_id,  		rpc_show_task_flags(__entry->flags),  		rpc_show_runstate(__entry->runstate), diff --git a/include/trace/events/syscalls.h b/include/trace/events/syscalls.h index 44a3259ed4a5..b6e0cbc2c71f 100644 --- a/include/trace/events/syscalls.h +++ b/include/trace/events/syscalls.h @@ -28,7 +28,7 @@ TRACE_EVENT_FN(sys_enter,  	TP_fast_assign(  		__entry->id	= id; -		syscall_get_arguments(current, regs, 0, 6, __entry->args); +		syscall_get_arguments(current, regs, __entry->args);  	),  	TP_printk("NR %ld (%lx, %lx, %lx, %lx, %lx, %lx)", diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h index a57e4ee989d6..b7a904825e7d 100644 --- a/include/trace/events/timer.h +++ b/include/trace/events/timer.h @@ -73,7 +73,7 @@ TRACE_EVENT(timer_start,  		__entry->flags		= flags;  	), -	TP_printk("timer=%p function=%pf expires=%lu [timeout=%ld] cpu=%u idx=%u flags=%s", +	TP_printk("timer=%p function=%ps expires=%lu [timeout=%ld] cpu=%u idx=%u flags=%s",  		  __entry->timer, __entry->function, __entry->expires,  		  (long)__entry->expires - __entry->now,  		  __entry->flags & TIMER_CPUMASK, @@ -89,23 +89,27 @@ TRACE_EVENT(timer_start,   */  TRACE_EVENT(timer_expire_entry, -	TP_PROTO(struct timer_list *timer), +	TP_PROTO(struct timer_list *timer, unsigned long baseclk), -	TP_ARGS(timer), +	TP_ARGS(timer, baseclk),  	TP_STRUCT__entry(  		__field( void *,	timer	)  		__field( unsigned long,	now	)  		__field( void *,	function) +		__field( unsigned long,	baseclk	)  	),  	TP_fast_assign(  		__entry->timer		= timer;  		__entry->now		= jiffies;  		__entry->function	= timer->function; +		__entry->baseclk	= baseclk;  	), -	TP_printk("timer=%p function=%pf now=%lu", __entry->timer, __entry->function,__entry->now) +	TP_printk("timer=%p function=%ps now=%lu baseclk=%lu", +		  __entry->timer, __entry->function, __entry->now, +		  __entry->baseclk)  );  /** @@ -210,7 +214,7 @@ TRACE_EVENT(hrtimer_start,  		__entry->mode		= mode;  	), -	TP_printk("hrtimer=%p function=%pf expires=%llu softexpires=%llu " +	TP_printk("hrtimer=%p function=%ps expires=%llu softexpires=%llu "  		  "mode=%s", __entry->hrtimer, __entry->function,  		  (unsigned long long) __entry->expires,  		  (unsigned long long) __entry->softexpires, @@ -243,7 +247,8 @@ TRACE_EVENT(hrtimer_expire_entry,  		__entry->function	= hrtimer->function;  	), -	TP_printk("hrtimer=%p function=%pf now=%llu", __entry->hrtimer, __entry->function, +	TP_printk("hrtimer=%p function=%ps now=%llu", +		  __entry->hrtimer, __entry->function,  		  (unsigned long long) __entry->now)  ); diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index a1cb91342231..252327dbfa51 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h @@ -226,7 +226,7 @@ TRACE_EVENT(mm_shrink_slab_start,  		__entry->priority = priority;  	), -	TP_printk("%pF %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d", +	TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",  		__entry->shrink,  		__entry->shr,  		__entry->nid, @@ -265,7 +265,7 @@ TRACE_EVENT(mm_shrink_slab_end,  		__entry->total_scan = total_scan;  	), -	TP_printk("%pF %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", +	TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",  		__entry->shrink,  		__entry->shr,  		__entry->nid, diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index 9a761bc6a251..e172549283be 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h @@ -60,7 +60,7 @@ TRACE_EVENT(workqueue_queue_work,  		__entry->cpu		= pwq->pool->cpu;  	), -	TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u", +	TP_printk("work struct=%p function=%ps workqueue=%p req_cpu=%u cpu=%u",  		  __entry->work, __entry->function, __entry->workqueue,  		  __entry->req_cpu, __entry->cpu)  ); @@ -102,7 +102,7 @@ TRACE_EVENT(workqueue_execute_start,  		__entry->function	= work->func;  	), -	TP_printk("work struct %p: function %pf", __entry->work, __entry->function) +	TP_printk("work struct %p: function %ps", __entry->work, __entry->function)  );  /** diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h index fdcf88bcf0ea..9a0e8af21310 100644 --- a/include/trace/events/xen.h +++ b/include/trace/events/xen.h @@ -73,7 +73,7 @@ TRACE_EVENT(xen_mc_callback,  		    __entry->fn = fn;  		    __entry->data = data;  		    ), -	    TP_printk("callback %pf, data %p", +	    TP_printk("callback %ps, data %p",  		      __entry->fn, __entry->data)  	); |