diff options
| -rw-r--r-- | include/trace/events/workqueue.h | 19 | ||||
| -rw-r--r-- | kernel/workqueue.c | 2 | 
2 files changed, 17 insertions, 4 deletions
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index e172549283be..bdfc53e7f82f 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h @@ -108,14 +108,27 @@ TRACE_EVENT(workqueue_execute_start,  /**   * workqueue_execute_end - called immediately after the workqueue callback   * @work:	pointer to struct work_struct + * @function:   pointer to worker function   *   * Allows to track workqueue execution.   */ -DEFINE_EVENT(workqueue_work, workqueue_execute_end, +TRACE_EVENT(workqueue_execute_end, -	TP_PROTO(struct work_struct *work), +	TP_PROTO(struct work_struct *work, work_func_t function), -	TP_ARGS(work) +	TP_ARGS(work, function), + +	TP_STRUCT__entry( +		__field( void *,	work	) +		__field( void *,	function) +	), + +	TP_fast_assign( +		__entry->work		= work; +		__entry->function	= function; +	), + +	TP_printk("work struct %p: function %ps", __entry->work, __entry->function)  );  #endif /*  _TRACE_WORKQUEUE_H */ diff --git a/kernel/workqueue.c b/kernel/workqueue.c index cfc923558e04..4bdfa270a37b 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -2266,7 +2266,7 @@ __acquires(&pool->lock)  	 * While we must be careful to not use "work" after this, the trace  	 * point will only record its address.  	 */ -	trace_workqueue_execute_end(work); +	trace_workqueue_execute_end(work, worker->current_func);  	lock_map_release(&lockdep_map);  	lock_map_release(&pwq->wq->lockdep_map);  | 
