Merge branch 'for-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[~shefty/rdma-dev.git] / include / trace / events / workqueue.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM workqueue
3
4 #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_WORKQUEUE_H
6
7 #include <linux/tracepoint.h>
8 #include <linux/workqueue.h>
9
10 DECLARE_EVENT_CLASS(workqueue_work,
11
12         TP_PROTO(struct work_struct *work),
13
14         TP_ARGS(work),
15
16         TP_STRUCT__entry(
17                 __field( void *,        work    )
18         ),
19
20         TP_fast_assign(
21                 __entry->work           = work;
22         ),
23
24         TP_printk("work struct %p", __entry->work)
25 );
26
27 /**
28  * workqueue_queue_work - called when a work gets queued
29  * @req_cpu:    the requested cpu
30  * @pwq:        pointer to struct pool_workqueue
31  * @work:       pointer to struct work_struct
32  *
33  * This event occurs when a work is queued immediately or once a
34  * delayed work is actually queued on a workqueue (ie: once the delay
35  * has been reached).
36  */
37 TRACE_EVENT(workqueue_queue_work,
38
39         TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq,
40                  struct work_struct *work),
41
42         TP_ARGS(req_cpu, pwq, work),
43
44         TP_STRUCT__entry(
45                 __field( void *,        work    )
46                 __field( void *,        function)
47                 __field( void *,        workqueue)
48                 __field( unsigned int,  req_cpu )
49                 __field( unsigned int,  cpu     )
50         ),
51
52         TP_fast_assign(
53                 __entry->work           = work;
54                 __entry->function       = work->func;
55                 __entry->workqueue      = pwq->wq;
56                 __entry->req_cpu        = req_cpu;
57                 __entry->cpu            = pwq->pool->cpu;
58         ),
59
60         TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u",
61                   __entry->work, __entry->function, __entry->workqueue,
62                   __entry->req_cpu, __entry->cpu)
63 );
64
65 /**
66  * workqueue_activate_work - called when a work gets activated
67  * @work:       pointer to struct work_struct
68  *
69  * This event occurs when a queued work is put on the active queue,
70  * which happens immediately after queueing unless @max_active limit
71  * is reached.
72  */
73 DEFINE_EVENT(workqueue_work, workqueue_activate_work,
74
75         TP_PROTO(struct work_struct *work),
76
77         TP_ARGS(work)
78 );
79
80 /**
81  * workqueue_execute_start - called immediately before the workqueue callback
82  * @work:       pointer to struct work_struct
83  *
84  * Allows to track workqueue execution.
85  */
86 TRACE_EVENT(workqueue_execute_start,
87
88         TP_PROTO(struct work_struct *work),
89
90         TP_ARGS(work),
91
92         TP_STRUCT__entry(
93                 __field( void *,        work    )
94                 __field( void *,        function)
95         ),
96
97         TP_fast_assign(
98                 __entry->work           = work;
99                 __entry->function       = work->func;
100         ),
101
102         TP_printk("work struct %p: function %pf", __entry->work, __entry->function)
103 );
104
105 /**
106  * workqueue_execute_end - called immediately after the workqueue callback
107  * @work:       pointer to struct work_struct
108  *
109  * Allows to track workqueue execution.
110  */
111 DEFINE_EVENT(workqueue_work, workqueue_execute_end,
112
113         TP_PROTO(struct work_struct *work),
114
115         TP_ARGS(work)
116 );
117
118 #endif /*  _TRACE_WORKQUEUE_H */
119
120 /* This part must be outside protection */
121 #include <trace/define_trace.h>