| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 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 |  | 
| Tejun Heo | 97bd234 | 2010-10-05 10:41:14 +0200 | [diff] [blame] | 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 |  | 
| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 27 | /** | 
| Tejun Heo | cdadf00 | 2010-10-05 10:49:55 +0200 | [diff] [blame] | 28 | * workqueue_queue_work - called when a work gets queued | 
|  | 29 | * @req_cpu:	the requested cpu | 
|  | 30 | * @cwq:	pointer to struct cpu_workqueue_struct | 
|  | 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 cpu_workqueue_struct *cwq, | 
|  | 40 | struct work_struct *work), | 
|  | 41 |  | 
|  | 42 | TP_ARGS(req_cpu, cwq, 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	= cwq->wq; | 
|  | 56 | __entry->req_cpu	= req_cpu; | 
|  | 57 | __entry->cpu		= cwq->gcwq->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 | /** | 
| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 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 before the workqueue callback | 
|  | 107 | * @work:	pointer to struct work_struct | 
|  | 108 | * | 
|  | 109 | * Allows to track workqueue execution. | 
|  | 110 | */ | 
| Tejun Heo | 97bd234 | 2010-10-05 10:41:14 +0200 | [diff] [blame] | 111 | DEFINE_EVENT(workqueue_work, workqueue_execute_end, | 
| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 112 |  | 
|  | 113 | TP_PROTO(struct work_struct *work), | 
|  | 114 |  | 
| Tejun Heo | 97bd234 | 2010-10-05 10:41:14 +0200 | [diff] [blame] | 115 | TP_ARGS(work) | 
| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 116 | ); | 
|  | 117 |  | 
| Arjan van de Ven | e36c886 | 2010-08-21 13:07:26 -0700 | [diff] [blame] | 118 | #endif /*  _TRACE_WORKQUEUE_H */ | 
|  | 119 |  | 
|  | 120 | /* This part must be outside protection */ | 
|  | 121 | #include <trace/define_trace.h> |