diff options
author | Tejun Heo <tj@kernel.org> | 2010-10-05 10:49:55 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-10-05 10:49:55 +0200 |
commit | cdadf0097cdca06c497ffaeb5982e028c6e4ed38 (patch) | |
tree | e02400ea54981e9621a30d3a2ce013e14f657e2e /include/trace | |
parent | 97bd234701b2b39a0e749c1fe0e44f1d14c94292 (diff) | |
download | linux-cdadf0097cdca06c497ffaeb5982e028c6e4ed38.tar.gz linux-cdadf0097cdca06c497ffaeb5982e028c6e4ed38.tar.bz2 linux-cdadf0097cdca06c497ffaeb5982e028c6e4ed38.zip |
workqueue: add queue_work and activate_work trace points
These two tracepoints allow tracking when and how a work is queued and
activated. This patch is based on Frederic's patch to add queue_work
trace point.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'include/trace')
-rw-r--r-- | include/trace/events/workqueue.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index ec9d7244eb9f..7d497291c85d 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h @@ -25,6 +25,59 @@ DECLARE_EVENT_CLASS(workqueue_work, ); /** + * workqueue_queue_work - called when a work gets queued + * @req_cpu: the requested cpu + * @cwq: pointer to struct cpu_workqueue_struct + * @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, + + TP_PROTO(unsigned int req_cpu, struct cpu_workqueue_struct *cwq, + struct work_struct *work), + + TP_ARGS(req_cpu, cwq, work), + + 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; + __entry->workqueue = cwq->wq; + __entry->req_cpu = req_cpu; + __entry->cpu = cwq->gcwq->cpu; + ), + + 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) +); + +/** * workqueue_execute_start - called immediately before the workqueue callback * @work: pointer to struct work_struct * |