2010-08-22 00:07:26 +04:00
# undef TRACE_SYSTEM
# define TRACE_SYSTEM workqueue
# if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ)
# define _TRACE_WORKQUEUE_H
# include <linux/tracepoint.h>
# include <linux/workqueue.h>
2010-10-05 12:41:14 +04:00
DECLARE_EVENT_CLASS ( workqueue_work ,
2010-08-22 00:07:26 +04:00
TP_PROTO ( struct work_struct * work ) ,
TP_ARGS ( work ) ,
TP_STRUCT__entry (
__field ( void * , work )
) ,
TP_fast_assign (
__entry - > work = work ;
) ,
2010-10-05 12:41:14 +04:00
TP_printk ( " work struct %p " , __entry - > work )
2010-08-22 00:07:26 +04:00
) ;
2010-10-05 12:49:55 +04:00
/**
* workqueue_queue_work - called when a work gets queued
* @ req_cpu : the requested cpu
2013-02-14 07:29:12 +04:00
* @ pwq : pointer to struct pool_workqueue
2010-10-05 12:49:55 +04:00
* @ work : pointer to struct work_struct
*
* This event occurs when a work is queued immediately or once a
* delayed work is actually queued on a workqueue ( ie : once the delay
* has been reached ) .
*/
TRACE_EVENT ( workqueue_queue_work ,
2013-02-14 07:29:12 +04:00
TP_PROTO ( unsigned int req_cpu , struct pool_workqueue * pwq ,
2010-10-05 12:49:55 +04:00
struct work_struct * work ) ,
2013-02-14 07:29:12 +04:00
TP_ARGS ( req_cpu , pwq , work ) ,
2010-10-05 12:49:55 +04:00
TP_STRUCT__entry (
__field ( void * , work )
__field ( void * , function )
__field ( void * , workqueue )
__field ( unsigned int , req_cpu )
__field ( unsigned int , cpu )
) ,
TP_fast_assign (
__entry - > work = work ;
__entry - > function = work - > func ;
2013-02-14 07:29:12 +04:00
__entry - > workqueue = pwq - > wq ;
2010-10-05 12:49:55 +04:00
__entry - > req_cpu = req_cpu ;
2013-02-14 07:29:12 +04:00
__entry - > cpu = pwq - > pool - > cpu ;
2010-10-05 12:49:55 +04:00
) ,
TP_printk ( " work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u " ,
__entry - > work , __entry - > function , __entry - > workqueue ,
__entry - > req_cpu , __entry - > cpu )
) ;
/**
* workqueue_activate_work - called when a work gets activated
* @ work : pointer to struct work_struct
*
* This event occurs when a queued work is put on the active queue ,
* which happens immediately after queueing unless @ max_active limit
* is reached .
*/
DEFINE_EVENT ( workqueue_work , workqueue_activate_work ,
TP_PROTO ( struct work_struct * work ) ,
TP_ARGS ( work )
) ;
2010-08-22 00:07:26 +04:00
/**
2010-10-05 12:41:14 +04:00
* workqueue_execute_start - called immediately before the workqueue callback
2010-08-22 00:07:26 +04:00
* @ work : pointer to struct work_struct
*
* Allows to track workqueue execution .
*/
2010-10-05 12:41:14 +04:00
TRACE_EVENT ( workqueue_execute_start ,
2010-08-22 00:07:26 +04:00
TP_PROTO ( struct work_struct * work ) ,
TP_ARGS ( work ) ,
TP_STRUCT__entry (
__field ( void * , work )
2010-10-05 12:41:14 +04:00
__field ( void * , function )
2010-08-22 00:07:26 +04:00
) ,
TP_fast_assign (
__entry - > work = work ;
2010-10-05 12:41:14 +04:00
__entry - > function = work - > func ;
2010-08-22 00:07:26 +04:00
) ,
2010-10-05 12:41:14 +04:00
TP_printk ( " work struct %p: function %pf " , __entry - > work , __entry - > function )
2010-08-22 00:07:26 +04:00
) ;
2010-10-05 12:41:14 +04:00
/**
2012-04-09 21:44:57 +04:00
* workqueue_execute_end - called immediately after the workqueue callback
2010-10-05 12:41:14 +04:00
* @ work : pointer to struct work_struct
*
* Allows to track workqueue execution .
*/
DEFINE_EVENT ( workqueue_work , workqueue_execute_end ,
TP_PROTO ( struct work_struct * work ) ,
TP_ARGS ( work )
) ;
2010-08-22 00:07:26 +04:00
# endif /* _TRACE_WORKQUEUE_H */
/* This part must be outside protection */
# include <trace/define_trace.h>