| 
									
										
										
										
											2010-08-21 13:07:26 -07: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 10:41:14 +02:00
										 |  |  | DECLARE_EVENT_CLASS(workqueue_work, | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07: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 10:41:14 +02:00
										 |  |  | 	TP_printk("work struct %p", __entry->work) | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * workqueue_queue_work - called when a work gets queued | 
					
						
							|  |  |  |  * @req_cpu:	the requested cpu | 
					
						
							| 
									
										
										
										
											2013-02-13 19:29:12 -08:00
										 |  |  |  * @pwq:	pointer to struct pool_workqueue | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02: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-13 19:29:12 -08:00
										 |  |  | 	TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq, | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02:00
										 |  |  | 		 struct work_struct *work), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-13 19:29:12 -08:00
										 |  |  | 	TP_ARGS(req_cpu, pwq, work), | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02: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-13 19:29:12 -08:00
										 |  |  | 		__entry->workqueue	= pwq->wq; | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02:00
										 |  |  | 		__entry->req_cpu	= req_cpu; | 
					
						
							| 
									
										
										
										
											2013-02-13 19:29:12 -08:00
										 |  |  | 		__entry->cpu		= pwq->pool->cpu; | 
					
						
							| 
									
										
										
										
											2010-10-05 10:49:55 +02: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-21 13:07:26 -07:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  |  * workqueue_execute_start - called immediately before the workqueue callback | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  |  * @work:	pointer to struct work_struct | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Allows to track workqueue execution. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  | TRACE_EVENT(workqueue_execute_start, | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	TP_PROTO(struct work_struct *work), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TP_ARGS(work), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TP_STRUCT__entry( | 
					
						
							|  |  |  | 		__field( void *,	work	) | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  | 		__field( void *,	function) | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  | 	), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TP_fast_assign( | 
					
						
							|  |  |  | 		__entry->work		= work; | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  | 		__entry->function	= work->func; | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  | 	), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  | 	TP_printk("work struct %p: function %pf", __entry->work, __entry->function) | 
					
						
							| 
									
										
										
										
											2010-08-21 13:07:26 -07:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2012-04-09 10:44:57 -07:00
										 |  |  |  * workqueue_execute_end - called immediately after the workqueue callback | 
					
						
							| 
									
										
										
										
											2010-10-05 10:41:14 +02: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-21 13:07:26 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /*  _TRACE_WORKQUEUE_H */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* This part must be outside protection */ | 
					
						
							|  |  |  | #include <trace/define_trace.h>
 |